如何使用SMTP和Perl向我的Gmail帐户发送电子邮件?

12

我不想使用sendmail发送电子邮件,而是更喜欢使用SMTP。如何使用Perl向我的GMAIL帐户发送电子邮件?


我不太明白这个问题:您是想直接与Google的SMTP服务器通信吗?还是您自己的SMTP服务器?这个问题是否与Gmail有关? - innaM
9个回答

12

就我个人而言,我建议你使用我的模块 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 $@;

6
根据评论,您是否想通过Google的SMTP发送电子邮件,还是只是一般地发送电子邮件(可能发送到您的Gmail帐户)不太清楚。您可以查看Email::Send和可能的Email::Send::Gmail

或者,如果您真正想问的是如何将电子邮件从不是Gmail的地方移动到Gmail,我使用IMAP和Mail::Box以及Mail::Box::IMAP4::SSL后端取得了非常好的运气。您可以在此处看到使用示例。


Email::Send 最近已被弃用,建议使用 Email::Sender。 - fB.

2

我一直使用并且非常幸运地运用了Mail::Sender


1

CPAN上有多个SMTP模块,例如Net::ESMTP。此外,sendmail很可能使用SMTP与邮件服务器通信,那么你不想使用它的真正原因是什么?


1

另一个你可能想要考虑的选择是使用来自CPAN的Email::Send::Gmail模块。这将允许你从你的Gmail账户发送电子邮件到任何账户(例如,发送给你自己)。


1

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 });

0

0

OP说:“我不想使用sendmail”。 - jfs

0

我刚好使用了MIME::Lite,它是Net::SMTP的包装器,可以简化构建电子邮件对象、文件附件和发送负载的过程。

如果您不熟悉安装模块,请查看:

在Windows上,使用ActiveState Perl软件包管理器(在开始菜单中)

在Unix上,使用CPAN:$ sudo cpan Module::Name

在托管的Unix帐户上:如何将CPAN模块安装到本地目录中?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接