多年来,我一直使用 Net::SMTP::TLS 在我的网络应用程序中通过 Google 电子邮件发送密码重置电子邮件。
my $smtp = Net::SMTP::TLS->new(email-smtp.us-east-1.amazonaws.com,
Hello => ,
Port => 587,
Timeout => 10,
Debug => 0,
User => [email protected],
Password => password123,
# NoTLS => !$gsmtpssl,
# Blocking => $blocking,
) or $c = 1;
print "TLS returned: $c,$smtp\n";
我已改用 Amazon 的简单电子邮件服务。如 AWS 文档中所述,我用来发送邮件的电子邮件地址已通过 Amazon SES 验证。在 AWS 控制台中,我必须创建已加密的 SMTP 凭证。如果我错了,请纠正我,为了从 AWS 简单电子邮件服务中已验证的电子邮件地址发送电子邮件,我需要 SMTP 用户名、SMTP 密码、SMTP 服务器名称和 SMTP 端口。我能够获得这些。
smtpuser abc
smtppassword 123456
email-smtp.us-east-1.amazonaws.com
但我想使用[email protected]
亚马逊提供给我的 smtp 凭证发送电子邮件,但它不起作用。
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use Net::SMTP::TLS;
my $mailer = new Net::SMTP::TLS(
'email-smtp.us-east-1.amazonaws.com',
Hello => 'World',
Port => 587, #redundant
User => 'abc',
Password=> '123456');
print Dumper($mailer);
$mailer->mail('[email protected]');
$mailer->to('[email protected]');
$mailer->data;
$mailer->datasend("Sent thru TLS!");
$mailer->dataend;
$mailer->quit;
答案1
Perl Net::SMTP -STARTTLS
通过AUTH
端口 587 (msa)
使用Net::SMTP
。其3.00以上版本支持STARTTLS
SMTP命令。
#!/usr/bin/perl
use strict;
use warnings;
use Net::SMTP;
my $user= 'abc';
my $pass= '123456';
my $mailer = new Net::SMTP(
'email-smtp.us-east-1.amazonaws.com',
Port => 587,
Debug => 1, # needed only during debugging
);
if( $mailer ) {
my $ok;
$mailer->starttls() &&
$mailer->auth( $user, $pass) &&
$mailer->mail('[email protected]') &&
$mailer->to('[email protected]') &&
$mailer->data() &&
$mailer->datasend(<<"END") &&
From: [email protected]
To: [email protected]
Subject: Delivery Test
Delivery test.
END
$mailer->dataend &&
$ok = 1;
$mailer->quit;
}