使用sendmail使用Perl发送电子邮件

时间:2013-11-10 09:50:45

标签: perl email

我正在关注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,因为我还在学习这个。

5 个答案:

答案 0 :(得分:8)

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

特别是任何指示您直接制作和发送低级格式的网站。

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

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

当他们应该简单地告诉您如何使用模块完成这些任务时,哪些网站无益于详细说明如何操作。

这是一个更简单的方法,使用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";