Perl Mail :: Mailer无法正常工作

时间:2015-12-08 12:45:56

标签: perl smtp

我是在Perl中使用模块的新手。我现在正在爆炸,我想知道这里有什么问题:

#!/usr/bin/perl

use strict;


use Mail::Mailer;


my $from_adress = "email\@xxxxx.com";
my $to_adress = "email\@hxxxx.com";
my $subject = "There goes bananas\n";
my $body = "Here is the bananas";
my $server = "smtp.gmail.com";

my $mailer = Mail::Mailer->new("smtp", Server => $server);
$mailer->open({
        From => $from_adress,
        To   => $to_adress,
        Subject => $subject,
});
print $mailer $body;
$mailer->close();

open(F, '>>', $Mail::Mailer::testfile::config{outfile});
print F @_;
print @_;
close (F);

很抱歉发布整个脚本,但我不确定它出错的地方。我从@_变量中得不到任何打印件。我很乐意接受有关如何改进在Perl中使用模块以及如何在其中获得更好的建议。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

在您的代码中使用strict做得好。如需额外赠送金额,也可以添加use warnings行。

我看不出你使用模块的方式有任何明显的问题。你觉得有什么不对吗?电子邮件没有发送?

如果您没有收到该电子邮件,那么我建议您的第一步应该是遵循文档中的示例并将close行更改为:

$mailer->close
  or die "couldn't send whole message: $!\n";

我想知道问题(如果有的话)是你使用谷歌的SMTP服务器,而你没有权限这样做。也许您需要先进行身份验证。

关于您的代码的其他几点。

不需要使用双引号字符串初始化所有设置变量。如果切换到单引号字符串,则不再需要转义数据中的@。您需要使用双引号将换行符放在$subject中,但我已将其删除,因为电子邮件主题行很少包含换行符。

my $from_adress = 'email@xxxxx.com';
my $to_adress = 'email@hxxxx.com';
my $subject = 'There goes bananas';
my $body = 'Here is the bananas';
my $server = 'smtp.gmail.com';

您的代码的最后四行在很多方面令人困惑。我不确定你想要在那里实现什么。我会指出两件事。首先,我们现在通常使用词法文件句柄。如果您从使用裸字文件句柄的来源学习,那么我会稍微担心它的年龄。因此文件开头行应如下所示:

# $f is, of course, a terrible name for a variable
open(my $f, '>>', $Mail::Mailer::testfile::config{outfile});

然后打印@_的值。在Perl中,@_包含子例程的参数。并且此代码不在子例程中,因此@_将为空。所以我并不感到惊讶,你没有得到任何输出。

最后,我要指出,当我使用Email :: *命名空间中的工具时,我发现我喜欢在Perl中使用电子邮件。特别是,我使用Email::Sender发送电子邮件。

更新:好的,我已经仔细查看了Mail::Mailer文档,我想我明白你在最后四行中要做的是什么。我想你正在尝试将邮件消息数据写入文件。是吗?

如果是,那么你就误解了文档。这样做的方法是将您传递的类型更改为new()。它必须是testfile而不是smtp。所以改变

my $mailer = Mail::Mailer->new("smtp", Server => $server);

my $mailer = Mail::Mailer->new("testfile",);

这会将邮件写入名为mailer.testfile的文件中,并且不会发送任何邮件。