以下是我用来发送HTML电子邮件的perl代码:
#!/usr/bin/perl
use strict;
use warnings;
use Switch;
use IO::File;
my $score = 2;
my $to = 'abc@a.com';
my $from = 'def@b.com';
my $subject = "SHV summary report for servers with score $score or higher";
my $mailbody = '<html><body>Hello</body></html>';
open(MAIL,"|/usr/sbin/sendmail -t");
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/html; charset=utf-8\n\n"
. "$mailbody";
close(MAIL);
它不起作用。我没有收到电子邮件。 但是如果我用:
替换open()调用打开(MAIL,“| cat -t”);
它打印以下内容:
To: abc@a.com
From: def@b.com
Subject: SHV summary report for servers with score 2 or higher
Content-Type: text/html; charset=utf-8
<html><body>Hello</body></html>
如果我更换:
my $subject = "SHV summary report for servers with score $score or higher";
使用:
my $subject = "SHV summary report for servers with core $score";
然后一切正常。如果我
将“核心”改回“得分”,或
在字符串中添加“或更高”,或
将其更改为“SHV得分$得分或更高”
它停止工作。谁知道为什么?
谢谢, 亚历
答案 0 :(得分:1)
将其更改为:
open( MAIL, qq(| /usr/sbin/sendmail -t abc\@a.com)) or die "failed on sending email ";
print MAIL "From:$from\n";
print MAIL "To:$to\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/html; charset=utf-8\n\n"
print MAIL "\n$mailbody";
答案 1 :(得分:1)
根据您的更新信息,听起来Sendmail配置为拒绝邮件主题太长的邮件。然而,人们现在不喜欢使用Sendmail,部分原因是因为它的配置很难解决,部分原因是因为它存在安全错误。
有可能解决主题问题,但我对Sendmail配置的了解不足以帮助您。您可以尝试切换到Postfix或QMail之类的内容,但我建议您只使用模块。我没有经验,但Net::SMTP看起来很有前途(你需要一个邮件服务器设置为使用Net :: SMTP,在你的情况下可能是'localhost',假设你继续运行Sendmail或其他邮件服务器程序与Perl脚本在同一系统上。)
答案 2 :(得分:1)
首先,当Perl有更多Perlish解决方案时,不要使用操作系统命令
您不能依赖于从系统到系统的操作系统命令,并且您不能依赖它们实际配置。
自5.8.8起, Net::SMTP包含在Perl中。它不依赖于sendmail
的配置,它通常有效。我在很多程序中一遍又一遍地使用它。我从来没有用它来进行MIME消息处理。但是,看起来您无论如何都要手动执行MIME位,因此Net::SMTP
应该可以正常工作。
但是,Perl中的常见问题解答有一个How do I use MIME to make an attachment to a mail message指向Email::MIME模块。这不是标准Perl的一部分,但不应该太难安装。
答案 3 :(得分:0)
Mail :: SendEasy应该是一种快速简便的替代解决方案。
它支持HTML电子邮件,SMTP身份验证,附件等。使用Mail :: SendEasy,您还可以删除sendmail程序的使用。因此,如果sendmail程序出现问题,通常会在使用Mail :: SendEasy
时自动解决