通过变量传递密码时Perl SMTP身份验证失败

ix0qys7i  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(154)

我有几百个通过gmailSMTP发送电子邮件的Perl脚本,所有的都是,并且已经用硬编码的gmail密码工作了几年了。
为了简化密码更改(以及安全性),我想将密码移动到一个env var中,并将其拉入Perl脚本中。

my $smtp = Net::SMTP::SSL->new('smtp.gmail.com', Port => 465);
my $passwd = $ENV{'PASSWD'}; # I added this line
$smtp->auth('email@gmail.com', $passwd); # I replaced 'theHardCodedPassWord' with $passwd

同样的方法也适用于非smtp场景--我从env var中提取信息并使用它。
我做错了什么?

xxls0lw8

xxls0lw81#

两种明显的调试方法:

  • 在呼叫auth()之前,打印$ENV{PASSWD}$passwd的值。
  • 打开Net::SMTP::SSL对象中的调试输出(将Debug => 1添加到对new()的调用中)。

其他几点:

  • Net::SMTP::SSL的文档非常清楚地表明该模块已被弃用,不应再使用。它说Net::SMTP现在内置了对SSL连接的支持。
  • 网络::SMTP似乎是解决这个问题的一个相当低级的方法。你考虑过Email::Send::Gmail吗?我甚至成功地用Email::Sender::Simple通过GMail发送电子邮件。
  • 我知道GMail最近加强了从外部应用程序使用SMTP服务器的安全性。

相关问题