8

我正在按照这个网站上的示例使用 Perl 发送电子邮件。代码如下所示:

my $hostname = `hostname`;
my $this_day = `date`;
my $email = "i.h4d35\@gmail.com";
my $to = "$email";
my $from = "admin\@$hostname";
my $subject = "SCHEDULE COMPLETE - $this_day";
my $message = "Student schedule for today, completed for the following students: \n\n$names\n\nHave a nice day...";
open(MAIL, "|/usr/sbin/sendmail -t");
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
print MAIL $message;
close(MAIL);

邮件已发送,但主题出现在邮件正文中,并且电子邮件没有主题。我该如何解决?

PS:还没有开始使用MIME::Lite,因为我还在学习这个。

4

5 回答 5

8

使用来自网站的示例是一个坏主意。

尤其是任何指导您直接制作和发送低级格式的网站。

您不应手动实现以下任何格式:

  • 电子邮件
  • HTML
  • CSV
  • IRC 协议
  • ETC

哪些网站无益地详细说明了如何做,什么时候应该简单地告诉您如何使用模块完成这些任务。

这是一个更简单的方法,使用 Email::Sender 和 Email::Simple,这两种软件都是由以处理电子邮件为生的人编写的高质量软件。

use strict;
use warnings;
my $hostname = `hostname`;
my $this_day = `date`;

use Email::Simple;
use Email::Simple::Creator;
use Email::Sender::Simple qw(sendmail);

my $email = Email::Simple->create(
 header => [
       From => "admin\@$hostname",
       To => "i.h4d35\@gmail.com",
       Subject => "SCHEDULE COMPLETE - $this_day",
 ],
 body => "Student schedule for today, completed for the following students: \n\n$names\n\nHave a nice day..."
);
sendmail($email);
于 2013-11-10T13:25:45.893 回答
4

的输出hostname包含换行符,因此$from包含换行符,因此该Subject:行出现在一对换行符之后,因此它被解释为在消息正文中。易于修复:

chomp($hostname);

您可能会发现类似的问题date

于 2013-11-10T09:52:45.617 回答
2

您可以从进入邮件标题的字段中删除所有换行符。

tr|\r\n||d for $to, $from, $subject;
于 2013-11-10T10:18:55.153 回答
1
#!/usr/local/bin/perl

use MIME::Lite;

my $msg = MIME::Lite->new(
       From    => 'you@your-server.com',
       To      => 'somerandom@gmail.com',
       Type    => 'text/plain',
       Subject => 'your subject',
       Data    => 'your message',
);

$msg->send;
于 2014-03-26T07:43:00.710 回答
0

这段代码对我有用,希望它有帮助

#!/usr/bin/perl

$to = 'sendmailtouser@company.com';
$from = 'fromuser@company.com';
$subject = 'Party!!!';
$message = 'Details of party';

open(MAIL, "|/usr/sbin/sendmail -t");

# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n";
于 2015-11-30T12:23:13.123 回答