我不想使用sendmail发送电子邮件,而是更喜欢使用SMTP。如何使用Perl向我的GMAIL帐户发送电子邮件?
就我个人而言,我建议你使用我的模块 Email::Send::SMTP::TLS,它可以很好地通过Google Mail的TLS运行。
谢谢。
use Email::Send;
my $mailer = Email::Send->new( {
mailer => 'SMTP::TLS',
mailer_args => [
Host => 'smtp.gmail.com',
Port => 587,
User => 'username@gmail.com',
Password => 'password',
Hello => 'fayland.org',
]
} );
use Email::Simple::Creator; # or other Email::
my $email = Email::Simple->create(
header => [
From => 'username@gmail.com',
To => 'to@mail.com',
Subject => 'Subject title',
],
body => 'Content.',
);
eval { $mailer->send($email) };
die "Error sending email: $@" if $@;
或者,如果您真正想问的是如何将电子邮件从不是Gmail的地方移动到Gmail,我使用IMAP和Mail::Box以及Mail::Box::IMAP4::SSL后端取得了非常好的运气。您可以在此处看到使用示例。
Email::Send(在Fayland Lam的回答中使用)已经过时:
Email::Send即将过时……其实并不是真正意义上的过时,但它被正式标记为“不受青睐”。
对我来说,这个更好,使用首选的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 });
如果你不喜欢sendmail,另一个选择是使用Postfix,另一个MTA。
以下是我在我的机器上使用gmail设置它的指示: http://souptonuts.sourceforge.net/postfix_tutorial.html
如果你收到来自Thawte Premium Server CA证书验证失败的警告,这也可能很有用。 http://ubuntuforums.org/archive/index.php/t-894355.html
我刚好使用了MIME::Lite
,它是Net::SMTP
的包装器,可以简化构建电子邮件对象、文件附件和发送负载的过程。
如果您不熟悉安装模块,请查看:
在Windows上,使用ActiveState Perl软件包管理器(在开始菜单中)
在Unix上,使用CPAN:$ sudo cpan Module::Name
在托管的Unix帐户上:如何将CPAN模块安装到本地目录中?