我正在关注this website的示例,使用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
,因为我还在学习这个。
答案 0 :(得分:8)
使用网站上的示例是一个坏主意。
特别是任何指示您直接制作和发送低级格式的网站。
您不应手动实施以下任何格式:
当他们应该简单地告诉您如何使用模块完成这些任务时,哪些网站无益于详细说明如何操作。
这是一个更简单的方法,使用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);
答案 1 :(得分:4)
hostname
的输出包含换行符,因此$from
包含换行符,因此Subject:
行出现在一对换行符之后,因此它被解释为在邮件正文中。易于修复:
chomp($hostname);
您可能会在date
找到类似的问题。
答案 2 :(得分:1)
您可以从进入邮件标题的字段中删除所有换行符。
tr|\r\n||d for $to, $from, $subject;
答案 3 :(得分: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;
答案 4 :(得分: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";