【问题标题】:Which package from CPAN should I use to send mail?我应该使用 CPAN 中的哪个软件包来发送邮件?
【发布时间】:2010-05-27 08:20:30
【问题描述】:

我应该使用 CPAN 中的哪个包来发送邮件

有时 timtowtdi 方法很累人。对我来说,尤其是在包装选择方面。

所以我只想发送电子邮件,可能是 HTML 电子邮件。在 Mail-Sendmail、Mail-Sender、NET-SMTP(顺便说一下 - PPM 中不可用)、Mail-SendEasy 以及大约 80 个其他包名称中包含“Mail”的包之间 - 我应该选择哪一个?

在这个主题中,您选择慢跑的“规范”套餐的一般方法是什么。 IE。 “每个人都在使用”的包。某处有评分或人气广告牌吗?

【问题讨论】:

标签: perl module cpan


【解决方案1】:

您选择慢跑的“规范”套餐的一般方法是什么。 IE。 “每个人都在使用”的包。某处有评分或人气广告牌吗?

当我想选择使用几个 CPAN 模块中的哪一个时,我看的东西是

文档:

CPAN 模块的试金石是文档的第一页。如果有一个混乱的概要,或者一个没有简单工作示例的概要,我猜这个模块可能不是一个好的模块。不整洁、凌乱或格式错误的文档也是一个危险信号。

维修状态:

  • 该模块最后一个版本的发布日期告诉您它是否正在维护,
  • CPAN tester's reports 告诉您该模块是否可以轻松安装
  • rt.cpan.org 上的错误列表让您了解作者在维护模块方面的积极程度。

另外,是否有该模块的邮件列表?拥有一个邮件列表是一个高质量、维护良好、稳定、文档化和流行的模块的一个很好的标志。

作者:

  • 模块作者叫什么名字?
  • 作者还发布了多少其他模块?
  • 作者发布了哪些模块?

作者是一个很大的因素。有一些作者创造了质量上乘的东西,比如 Gisle Aas、Graham Barr、Andy Wardley 或 Jan DuBois,还有一些人创造了很多可以被描述为“实验性”的东西,比如 Damian Conway 或 Tatsuhiko宫川。警惕那些发布了很多 Acme:: (joke) 模块的人。另外,请注意只维护一两个模块的人编写的东西。总共少于五个模块的人通常不会维护它们。

其他:

cpanratings.perl.org 通常很有帮助,但请谨慎对待。

除此之外,很多只是反复试验。下载并查看它是否通过了自己的测试,看看它是否有任何测试,编写测试脚本等。

通常没有给出有意义排名的事物:

  • Google 上排名靠前的搜索结果往往是古老的 Perlmonks 或 perl.com 或 Dr. Dobbs 的期刊文章,而这些文章通常会将您指向过时的内容。
  • search.cpan.org 的搜索功能将十年未更新的模块放在第一页,将最新最好的模块放在第十页之类的地方。

谨防“炒作”:

我还要说的一件事:警惕关于博客、stackoverflow、Usenet 新闻等的建议——人们往往会引导您使用本月最流行的任何模块,而不是一个稳定的、经过验证的解决方案。 “流行”的模块通常缺乏文档,不稳定,具有噩梦般的依赖关系,而且昨天的流行模块经常突然失宠并被抛弃,被当月的另一种风格所取代,如果你决定这样做,你就会陷入困境使用它们。

【讨论】:

    【解决方案2】:

    Task::Kensho 通常会提出很好的建议。对于发送电子邮件,它建议Email::Sender

    【讨论】:

      【解决方案3】:

      我会输入电子邮件::东西。它是 Email::MIME 的一个很好的包装器。您无需关心邮件的 MIME 结构,由模块为您完成。

      Email::Stuff->from     ('cpan@ali.as'                      )
                  ->to       ('santa@northpole.org'              )
                  ->bcc      ('bunbun@sluggy.com'                )
                  ->text_body($body                              )
                  ->attach   (io('dead_bunbun_faked.gif')->all,
                              filename => 'dead_bunbun_proof.gif')
                  ->send;
      

      至于选择模块,

      【讨论】:

      • 很方便,但没有很好的错误检查。不要调用方法send,而是获取对象并将其输入Email::Sender
      【解决方案4】:

      如果您只需要基本功能,我建议您查看Mime::Lite

      use MIME::Lite; 
      my $msg = new MIME::Lite
      From => 'Your friendly neighbourhood spiderman',
      To => 'green@goblin.net', 
      CC => 'info@nemesis.org',
      BCC => 'mj@spidey.info',
      'Reply-to' => 'enemies@spidey.info',
      Subject => 'Please stop',
      Data     => $data; #Email body
      
      die 'Could not send mail' unless ($msg->send);
      

      【讨论】:

      • 好吧,我不介意投反对票,但你能评论一下为什么吗?我也是来学习的:)
      • 我没有投票,所以我只能猜测:间接对象语法被鄙视。 (那是“new Foo”而不是“Foo->new”) MIME::Lite 相当平庸。蜘蛛侠是一个连字符。
      【解决方案5】:

      【讨论】:

      • Email::Sender 是一个几乎没有文档的模块,具有依赖地狱,即使在标准 Unix 机器上也很难安装。 Email::Send 是一个稳定的、有文档的、成熟的模块,它确实可以工作。
      • 作为Email::Send和Email::Sender的维护者,我强烈推荐Email::Sender。 Email::Send 有严重的错误,在测试过程中可能非常危险,并且不容易修复。它的界面除了“嘿,让我们发送一封邮件或其他什么”之外的任何东西都是一场噩梦。我很高兴记录您认为search.cpan.org/dist/Email-Sender/lib/Email/Sender/Manual/… 未涵盖的内容,但我不知道这些内容是什么。
      【解决方案6】:

      我更喜欢的是

      Mail::Sendmail

      MIME::Lite

      如果您需要 SSL,则包括

      Net::SMTP::SSL

      【讨论】:

      • 为什么要投反对票?这些模块对发送电子邮件没有用吗?请发表评论,我想学习。
      猜你喜欢
      • 2015-05-13
      • 2011-03-05
      • 2019-07-20
      • 2018-03-26
      • 1970-01-01
      • 2011-06-15
      • 2019-05-24
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多