Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: gmail sending in 2020

by clueless newbie (Curate)
on Jan 29, 2020 at 19:18 UTC ( [id://11112038] : note . print w/replies, xml ) Need Help??


in reply to gmail sending in 2020

I tried the code in the post noted above without success (session error: 5.7.8 Username and Password not accepted. Learn more at...) (Windows 10) until ...

"As it turns out, there are TWO "Allow Less Secure Apps" toggles which need to be changed to allow logins from unknown devices/IMAP.

One here: https://myaccount.google.com/security?pli=1#connectedapps (bottom of the page)

And one here: https://www.google.com/settings/security/lesssecureapps

BOTH OF THESE GODFORSAKEN TOGGLES need to be changed to get rid of this error message."

See this stackoverflow post.

Replies are listed 'Best First'.
Re^2: gmail sending in 2020
by iaw4 (Monk) on Jan 29, 2020 at 21:34 UTC
    thanks, both of you. I will try it now. last time it was discussed was 4 years ago. sometimes, google changes stuff every other week, sometimes never. let's see if I can make it work. if so, I will post something here that summarizes it.
      As of Jan 29, 2020, the following works.
      1. Turn off 2FA .
      2. on 'https://myaccount.google.com/security?pli=1#connectedapps', look for and allow Less secure app access
      3. on 'https://myaccount.google.com/lesssecureapps', same thing.
      4. use the slightly elaborated perl program:
      #!/usr/bin/env perl use strict; use warnings; use autodie; use Data::Dumper; my $gauthtxt= "gauth.txt"; # can define default sending user account +and password ## format: 'user\temail\npasswd\tstring\n' ################################################################ # parse inputs # defaults my %smtp= ( server => 'smtp.gmail.com', port => '587', subject => "tes +ting gmailer.pl", body => "gmail-tester $0: ".localtime() ); # more defaults in gauth.txt if (-e $gauthtxt) { print STDERR "[reading $gauthtxt]\n"; open(my $GA, "<", $gauthtxt); while (<$GA>) { chomp; (/^([a-z]+)\s+(.*)$/) or die "line in $gauthtxt is not pars +eable: $_\n"; $smtp{$1}= $2; } close($GA); } # command line arguments foreach (@ARGV) { foreach my $keyword (qw(user to passwd subject body)) { (/^$keyword= +(.*)/) and $smtp{$keyword}=$1; } } (exists{$smtp{from})) and $smtp{user}=$smtp{from}; ## special equivale +nce ################################################################ # check inputs foreach (qw(user to passwd subject body)) { exists($smtp{$_}) or die "'$_' needs to be in $gauthtxt or spcified +on command line with '$_=...'\n"; } use Email::Valid; (Email::Valid->address($smtp{user})) or die "your own user account $sm +tp{user} is not a valid email address"; (Email::Valid->address($smtp{to})) or die "your recipientd account $sm +tp{to} is not a valid email address"; ################################################################ # send email use Email::Sender::Simple qw(sendmail); use Email::Sender::Transport::SMTPS (); use Email::Simple (); use Email::Simple::Creator (); my $transport = Email::Sender::Transport::SMTPS->new({ host => $smtp{server}, port => $smtp{port}, ssl => "starttls", sasl_username => $smtp{user}, sasl_password => $smtp{passwd}, }); my $email = Email::Simple->create( header => [ To => $smtp{to}, From => $smtp{user}, Subject => $smtp{subject} ], body => $smtp{body}."\n", ); sendmail($email, { transport => $transport }); print "\nemail sent from $smtp{user} to $smtp{to}.\n";