【发布时间】:2017-05-26 10:36:02
【问题描述】:
我有一个 perl 导出脚本,它生成一个 .csv 文件,然后通过电子邮件将其发送给用户。我走这条路是因为我们不希望用户必须在特定页面上等待导出完成,而是允许它在后台导出。
但是,当附加 csv 并发送电子邮件时,我收到以下错误:
[Net::SMTP::SSL] Connection closed
我不能在这里放很多代码,但我至少可以告诉你代码的哪一部分报告了这个错误。我想知道这里是否有人知道为什么会发生这种情况,或者有一种简单的调试方法。
这是发送电子邮件的代码块(带有错误报告的注释):
my $mailer = new Net::SMTP::SSL($smtp, Port => $port) or die "Cannot create a SSL mailer instance!\n";
$mailer->auth($user, $pass) or die ("Can't authenticate");
$mailer->mail($email) or die $mailer->message;
$mailer->to(split(',', $to)) or die $mailer->message;
$mailer->data() or die $mailer->message;
$mailer->datasend($msg->as_string) or die $mailer->message; # Connection closed
$mailer->dataend() or die $mailer->message;
$mailer->quit() or die $mailer->message;
如果需要任何其他信息,请告诉我。我会尽力提供我能提供的。这很难解决,因为错误是如此模棱两可。
注意:删除违规附件时电子邮件成功发送,有时会根据 csv 内容发送。
【问题讨论】:
-
请添加所有详细信息以使问题可重现。如果问题仅发生在特定邮件内容上,您需要将此内容添加到问题中。见How to create a Minimal, Complete, and Verifiable example。
-
@SteffenUllrich 虽然我希望可以添加 csv 的内容,但有问题的内容是我无法提供的敏感数据。我知道这只会使事情复杂化,但我有点抓住稻草,看看是否有人遇到某些内容的问题,导致拒绝/关闭与 gmail 的 smtp 连接。
-
您不需要添加导致问题的原始(敏感)内容,只需添加一些导致问题的(非敏感)内容就足够了。我怀疑您将无法解决您公认的奇怪问题,因为无法重现它。还要确保您使用的是最新版本的 Net::SMTP(由 Net::SMTP::SSL 使用),以防出现已知但已修复的错误。
-
我不知道整个 csv 中的原因是什么。为了做到这一点,我需要逐行、逐列地找出问题发生的位置(30 多列,超过 100 行)。这也不是万能的,因为我需要在多个导出上对此进行测试,因为任何数据都可能导致类似的问题。
-
正如答案中所建议的:邮件的大小比 CSV 的内容更有可能。您是否尝试发送相同尺寸的无用的东西?无论如何,敏感内容都应该进行 PGP 加密,通过亚马逊发送,可能还有谷歌,就像自己将其上传到 NSA 服务器一样。