首页 > 解决方案 > 无法使用 perl 模块从 ubuntu 14 发送邮件 Email::Send::SMTP::Gmail

问题描述

我有多个 ubuntu 云服务器,如果出现错误,会向我自己发送一封电子邮件。我使用 Perl 模块 Email::Send::SMTP::Gmail。

my ($mail, $error) = Email::Send::SMTP::Gmail->new(
    -smtp        => 'smtp.gmail.com',
    -port        => 587,
    -login       => '...',
    -pass        => '...',
    -debug       => 1,
    -verbose     => 1
);

eval {
    # send email now
    $mail->send(
        -to          => '...',
        -subject     => 'email test',
        -body   => 'email test',
        -contenttype => 'text/html'
    );
    $mail->bye;
};

该代码在除一台服务器之外的所有服务器上都能完美运行。都是ubuntu 14服务器。

以下是成功的服务器上的调试日志:

Connecting to smtp.gmail.com using tls with AUTO on port 587 and timeout of 60
Net::SMTP>>> Net::SMTP(3.11)
Net::SMTP>>>   Net::Cmd(3.11)
Net::SMTP>>>     Exporter(5.68)
Net::SMTP>>>   IO::Socket::INET(1.33)
Net::SMTP>>>     IO::Socket(1.36)
Net::SMTP>>>       IO::Handle(1.34)
Net::SMTP=GLOB(0x10f0fc0)<<< 220 smtp.gmail.com ESMTP l44sm57914288pje.29 - gsmtp
Net::SMTP=GLOB(0x10f0fc0)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x10f0fc0)<<< 250-smtp.gmail.com at your service, [.....]
Net::SMTP=GLOB(0x10f0fc0)<<< 250-SIZE 35882577
Net::SMTP=GLOB(0x10f0fc0)<<< 250-8BITMIME
Net::SMTP=GLOB(0x10f0fc0)<<< 250-STARTTLS
Net::SMTP=GLOB(0x10f0fc0)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x10f0fc0)<<< 250-PIPELINING
Net::SMTP=GLOB(0x10f0fc0)<<< 250-CHUNKING
Net::SMTP=GLOB(0x10f0fc0)<<< 250 SMTPUTF8
Net::SMTP=GLOB(0x10f0fc0)>>> STARTTLS
Net::SMTP=GLOB(0x10f0fc0)<<< 220 2.0.0 Ready to start TLS
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> EHLO localhost.localdomain
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250-smtp.gmail.com at your service, [.....]
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250-SIZE 35882577
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250-8BITMIME
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250-PIPELINING
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250-CHUNKING
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250 SMTPUTF8
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> AUTH LOGIN
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 334 VXNlcm5hbWU6
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< (decoded) Username:
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> (decoded) .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 334 .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< (decoded) Password:
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> (decoded) .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 235 2.7.0 Accepted
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> MAIL FROM:<.....>
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250 2.1.0 OK l44sm57914288pje.29 - gsmtp
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> RCPT TO:<.....>
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250 2.1.5 OK l44sm57914288pje.29 - gsmtp
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> DATA
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 354  Go ahead l44sm57914288pje.29 - gsmtp
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> From: .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> To: .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> Reply-To: .....
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> Subject: email test
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> Date: Tue, 30 Jul 2019 15:54:26 +0000
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> MIME-Version: 1.0
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> Content-Type: text/html; charset=UTF-8
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> email test
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> .
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 250 2.0.0 OK  1564502779 l44sm57914288pje.29 - gsmtp
Net::SMTP::_SSL=GLOB(0x10f0fc0)>>> QUIT
Net::SMTP::_SSL=GLOB(0x10f0fc0)<<< 221 2.0.0 closing connection l44sm57914288pje.29 - gsmtp

以下是失败的服务器的日志。

Connecting to smtp.gmail.com using tls with AUTO on port 587 and timeout of 60
Net::SMTP>>> Net::SMTP(3.11)
Net::SMTP>>>   Net::Cmd(3.11)
Net::SMTP>>>     Exporter(5.68)
Net::SMTP>>>   IO::Socket::INET(1.33)
Net::SMTP>>>     IO::Socket(1.36)
Net::SMTP>>>       IO::Handle(1.34)
Net::SMTP=GLOB(0x2556268)<<< 220 smtp.gmail.com ESMTP d12sm27628903pfn.11 - gsmtp
Net::SMTP=GLOB(0x2556268)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x2556268)<<< 250-smtp.gmail.com at your service, [.....]
Net::SMTP=GLOB(0x2556268)<<< 250-SIZE 35882577
Net::SMTP=GLOB(0x2556268)<<< 250-8BITMIME
Net::SMTP=GLOB(0x2556268)<<< 250-STARTTLS
Net::SMTP=GLOB(0x2556268)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x2556268)<<< 250-PIPELINING
Net::SMTP=GLOB(0x2556268)<<< 250-CHUNKING
Net::SMTP=GLOB(0x2556268)<<< 250 SMTPUTF8
Net::SMTP=GLOB(0x2556268)>>> STARTTLS
Net::SMTP=GLOB(0x2556268)<<< 220 2.0.0 Ready to start TLS
Net::SMTP::_SSL=GLOB(0x2556268)>>> EHLO localhost.localdomain
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250-smtp.gmail.com at your service, [.....]
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250-SIZE 35882577
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250-8BITMIME
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250-PIPELINING
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250-CHUNKING
Net::SMTP::_SSL=GLOB(0x2556268)<<< 250 SMTPUTF8
Authentication -using server methods list- (SMTP) failed: smtp.gmail.com at your service, [.....]
SIZE 35882577
8BITMIME
AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
ENHANCEDSTATUSCODES
PIPELINING
CHUNKING
SMTPUTF8
Can't locate object method "send"

两者都是相同的服务器并在 ubuntu 14 上运行。此外,我启用了 google 的“允许安全性较低的应用程序”选项。有人可以建议我缺少什么吗?

标签: perlemailsmtpubuntu-14.04

解决方案


推荐阅读