当我尝试使用MIME :: Lite向Gmail帐户发送电子邮件时,为什么会出现“SMTP无法连接到邮件服务器:”?

时间:2014-12-24 11:07:16

标签: perl email authentication smtp

我有以下代码在Perl中发送电子邮件:

#!/usr/bin/perl

use MIME::Lite;

$to = 'toid@domain.com';
$cc = 'ccid@domain.com';
$from = 'fromid@domain.com';

$subject = 'Test Email';
$message = 'This is test email sent by Perl Script';

$msg = MIME::Lite->new(
             From     => $from,
             To       => $to,
             Cc       => $cc,
             Subject  => $subject,
             Data     => $message
             );

$msg->send;
#$msg->send('smtp', "smtp.gmail.com", AuthUser=>"myid@domain.com", AuthPass=>"mypass" );
#$msg->send('smtp', "smtp.gmail.com",  Debug=>0 );
#$msg->send('type',@args);
print "Email Sent Successfully\n";

当我运行它时,我收到以下错误:

SMTP Failed to connect to mail server:

当我使用参数调用$msg->send时(请参阅上面的注释行),我收到以下错误:

SMTP auth() command not supported on smtp.gmail.com

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

有人在几年前为此提出了bug report。维护者的回应是:

  

这不太可能修复。

     

MIME :: Lite不支持Net :: SMTP :: TLS,我也不认为自己将来会实现这一点。我强烈建议将MIME :: Lite转移到Email :: Sender和Email :: MIME等工具或其他更受支持的工具。

请注意,您不应该首先使用MIME::Lite,因为documentation建议不要使用它:

  

WAIT!

     

当前的维护者不推荐使用MIME :: Lite。有许多替代方案,例如Email :: MIME或MIME :: Entity和Email :: Sender,您可能应该使用它们。 MIME :: Lite继续产生奇怪的错误报告,并且由于有更好的替代方案,它没有收到大量的重构。请考虑使用其他东西。

答案 1 :(得分:1)

MIME :: Lite是(因为ThisSuitIsNotBlack说明)不推荐使用。

这适用于我,使用首选的Email :: Sender:

use strict;
use warnings;

use Email::Sender::Simple qw(sendmail);
use Email::Sender::Transport::SMTPS ();
use Email::Simple ();
use Email::Simple::Creator ();

my $smtpserver = 'server';
my $smtpport = 587;
my $smtpuser   = 'username';
my $smtppassword = 'password';

my $transport = Email::Sender::Transport::SMTPS->new({
  host => $smtpserver,
  port => $smtpport,
  ssl => "starttls",
  sasl_username => $smtpuser,
  sasl_password => $smtppassword,
});

my $email = Email::Simple->create(
  header => [
    To      => 'mymail@gmail.com',
    From    => 'sender@example.com',
    Subject => 'Hi!',
  ],
  body => "This is my message\n",
);

sendmail($email, { transport => $transport });

答案 2 :(得分:0)

可以使用Net :: SMTP 3.05(CPAN的最新版本)修复。它支持SMTPS和STARTTLS [警告:请参阅MIME::Lite 3.030 - NET::SMTP with smtps (port 465)]

# It should work with Net::SMTP 3.05
# MIME::Lite will pass SSL=>1 to Net::SMTP constructor
$msg->send('smtp', "smtp.gmail.com", SSL=>1,
AuthUser=>"myid@domain.com", AuthPass=>"mypass" );

答案 3 :(得分:0)

以上方法在

时有效
  1. 我将Gmail用作SMTP->打赌您认为您无法做到这一点。
    1   2   3   4   5   6   7   8
0   3   16  3   2   17  2   3   2
1   3   16  3   2   19  4   3   2
2   3   16  3   2   9   2   3   2
3   3   16  3   2   19  1   3   2
4   3   16  3   2   17  2   3   1
5   3   16  3   2   17  1   17  1
6   3   16  3   2   19  1   17  2
7   3   16  3   2   19  4   3   1
8   3   16  3   2   19  1   3   2
9   3   16  3   2   7   2   17  1




corr = t.corr()
corr
  1. 然后,您实际上必须将Gmail帐户的安全性设置为不太安全…基本上将“访问安全性较低”设置为“开” 设置-> https://myaccount.google.com/security

希望这对其他人有帮助。