请问用perl如何进行邮件直发?

请问用perl如何进行邮件直发?

有一个服务器,虽然安装了sendmail,但是smtp服务并没有打开,需要邮件直发

还是第一次听说这个名词,是怎么回事啊?

用perl编写的话该如何实现呢?
如果是rh-linux的话,运行:
service sendmail start
打开sendmail服务即可.

正好前阵我写了个邮件批量发送的脚本,share给你吧.

主程序batchsend.pl如下:

QUOTE:
#!/usr/bin/perl
#
# by Jeff Pang <pangj@earthlink.net>
#
use strict;
use MIME::Lite;
use MIME::Words qw/:all/;
use Email::Valid;
require 'config.txt';

our $content = slurp('template.html');
our %config;
our $subject = $config{subject};
our $sender_name = $config{sender_name};
our $sender_email = $config{sender_email};

$subject = encode_mimeword($subject,'b','gb2312');
$sender_name = encode_mimeword($sender_name,'b','gb2312');

my $recepients = get_recepient('email.txt');

for my $to (@$recepients) {
    sendmail($to);
}

sub sendmail {

    my $to = shift;

    my $msg = MIME::Lite->new(
        From    => "$sender_name <$sender_email>",
        To      => $to,
        Subject => $subject,
        Type    => 'text/html',
        Encoding => 'base64',
        Data    => $content,
    );

    $msg->attr('content-type.charset' => 'gb2312');
    $msg->send('smtp','127.0.0.1', Debug=>0);
}

sub slurp {

    my $file = shift;

    local $/;
    open HD,$file or die $!;
    my $c = <HD>;
    close HD;

    return $c;
}

sub get_recepient {
   
    my $file = shift;
    my @addr;

    open HD,$file or die $!;
    while(<HD>) {
        s/^\s+|\s+$//g;
        next if /^$/;
        next unless Email::Valid->address($_);
        push @addr,$_;
    }
    close HD;

    return \@addr;
}

配置文件config.txt内容如下:

QUOTE:
%config = (
    sender_email => 'cs@abc-online.com',
    sender_name  => 'ABC客服',
    subject      => 'ABC群发邮件',
);

1;

地址列表email.txt内容类似如下:

QUOTE:
test@aol.com   
test@163.com   
test@yahoo.com

另外还有一个template.html是信件模板,自己定吧.
从网上下载 sendMail 2.0.8模块,安装后,调用就可以了,如下:
use SendMail 2.08;
  
#SendMail module hash.
  my  $sm = new SendMail;
  $sm->setDebug($sm->OFF);
  $sm->From("CMVC reports <lianping\@cn.ibm.com>");
  $sm->Subject($mailtitle);
  $sm->To("Recipient <$email>");
  $sm->setMailBody("$mailcontent");
  if ($sm->sendMail() != 0) {
  exit -1;
  }
谢谢两位大虾的解答

我用Net::SMTP模块把这个问题解决了

两位大虾提供的方法,给我提供了另外的不同方法,多谢

还有一个“笨”问题:邮件直发是不是就是不通过local host的smtp服务把邮件发出去啊?看完邮件的基本原理,是不是才好弄懂这个问题?
各位继续请教~~~

如果我有一个邮件地址列表文件,还有一个邮件文件。我欲使用这两个文件发送,出去NET::SMTP后面的邮件传递过程,我的脚本应该怎么写合适。

十分感谢!!!!
邮件直发差不多就是你说的那个意思...

邮件地址列表...把这个读档进来.....在Mail To的地方填入这些内容..可能用"," 或";"分隔..你要自己测试看看...
另外一般都可以发送MIME的附档..注意看前面或perldoc应该有教你才对....如果没有..建议你改用
SendMail module....