我有一个 Perl 脚本,它可以向用户发送简单的 HTML 电子邮件,其中包含状态更新和指向更多信息的链接。我正在使用 Net::SMTP 创建邮件并使用 smtp-relay.gmail.com 发送邮件。多年来,它一直运行良好。
在上个月,电子邮件停止出现 - 只是没有出现错误,也没有出现在垃圾邮件中。经过数小时的故障排除后,我已将问题缩小到 Gmail 静默丢弃包含我的特定 URL 的电子邮件。
http://DOMAIN/cgi-bin/requests/single_request.pl?requestid=111111
我换了一个角色,噗!再次工作。
http://DOMAIN/cgi-bin/requests/single-request.pl?requestid=111111
我知道这是一个模糊的问题,但这是怎么回事?解决方法很好,但我肯定没有了解根本原因。
#!c:\strawberry\perl\bin -w
use strict;
use warnings;
use Net::SMTP;
use Net::Config;
# use this function to send email
#
# example:
#
# send_mail("RECIPIENT\@DOMAIN", "SUBJECT HERE", "BODY HERE");
sub send_mail{
my $recipient = shift;
my $subject = shift;
my $body = shift;
# connect to an SMTP server
my $smtp = Net::SMTP->new("smtp-relay.gmail.com", Debug => 0, Timeout => 30, Hello => 'REDACTED') or die "SMTP Connection Failed: smtp-relay.gmail.com";
# sender's address here
$smtp->mail('REDACTED');
# recipient"s address
$smtp->to($recipient);
# Start the mail
$smtp->data();
# Send the header.
$smtp->datasend("MIME-Version: 1.0\n");
$smtp->datasend("Content-Type: text/html; charset=\"UTF-8\" \n");
$smtp->datasend("To: $recipient . \n");
$smtp->datasend("From: REDACTED\n");
$smtp->datasend("Reply-to: REDACTED\n");
$smtp->datasend("Subject: $subject \n");
$smtp->datasend("\n");
# Send the body.
$smtp->datasend($body);
# Finish sending the mail
$smtp->dataend();
# Close the SMTP connection
$smtp->quit();
}
1;