Perl -- 使用Perl 读取和发送邮件

使用POP3读取邮件


要读取邮件,可以下载 Net::POP3 模组。

模组相关介绍以及下载地址:  http://search.cpan.org/~gbarr/libnet-1.19/Net/POP3.pm

#!/usr/local/bin/perl
#***********************************************************************
# [Author]:oscar999
# 
#***********************************************************************

use strict;
use Net::POP3;

our $mail_host  = 'XXXXXXXX';
our $mail_login = 'XXXXXXXX';
our $mail_pass  = 'XXXXXXXX';

my $pop = Net::POP3->new($mail_host) or die "Can't connect to $mail_host";
if($pop->login($mail_login,$mail_pass)>0)
{
	my $msgnums = $pop->list;
	foreach my $msgnum (keys %$msgnums) {				
		my $msg = $pop->get($msgnum);
 		print($msgnum."\n");
                print (@$msg);	
	}
}
$pop->quit;

这里的$msgnums  是一个哈希表(hash)类型的数据。

key 值(对应上面的$msgnum)是没有删除的邮件的编号(形如 1, 2, ..... )

而对应的value(对应到上面的$msg) 是一个数组。包含了文件头和文件的内容。

    my $msg = $pop->get(1);
    print (@$msg);
如果取所有邮件较慢的话, 可以直接取一封邮件看看就知道了。


要详细的读取这份邮件的内容,可以使用 Mail::Message对上面的msg array 进行转型。

Mail::Message的下载和介绍:

http://search.cpan.org/~markov/Mail-Box-2.110/lib/Mail/Message.pod

实例:

    my $msg = $pop->get(1);
    print (@$msg);
    my $mail_msg =  Mail::Message->read($msg);
    my $subject = $mail_msg->subject;
    my $revtime = $mail_msg->timestamp;
    print("subject=$subject\n");
    print("revtime=$revtime\n");


使用MIME::LITE 发信

MIME::Lite 是比较早使用的Perl  发信的模块, 但是现在已经不推荐使用了。

官方的介绍是说: 此模块尚会更新一些小bug, 但是不会做大的重构, 推荐使用Email::MIME 或者 MIME::Entity 或者Email::Sender来发信。

不过此处还是介绍一下。

模块介绍与下载地址:

http://search.cpan.org/~rjbs/MIME-Lite-3.030/lib/MIME/Lite.pm

直接看示例:

#!/usr/local/bin/perl
#***********************************************************************
# [Author]:oscar999
# 
#***********************************************************************
use MIME::Lite;   
$msg = MIME::Lite->new(
    From     => 'me@myhost.com',
    To       => 'you@yourhost.com',
    Cc       => 'some@other.com, some@more.com',
    Subject  => 'Helloooooo, nurse!',
    Type     => 'image/gif',
    Encoding => 'base64',
    Path     => 'hellonurse.gif'
);
$msg->send('smtp','some.host'); # host like smtp.xxxxx.xx

也可以这样:

  MIME::Lite->send('smtp', 'some.host', Timeout=>60);
  $msg define
 .................
  $msg->send();



使用 Email::MIME 和 Email::Sender

Email::MIME和Email::Sender 的模组地址是:

  http://search.cpan.org/~rjbs/Email-MIME-1.925/lib/Email/MIME.pm

  http://search.cpan.org/~rjbs/Email-Sender-1.300006/lib/Email/Sender.pm


1. 构造 Email Message

  use Email::MIME;
  my $parsed = Email::MIME->new($message);

  my @parts = $parsed->parts; # These will be Email::MIME objects, too.
  my $decoded = $parsed->body;
  my $non_decoded = $parsed->body_raw;

  my $content_type = $parsed->content_type;

2. 使用 Email sender 发信

 use Email::Sender::Simple qw(sendmail);
  use Email::Sender::Transport::SMTP qw();
  use Try::Tiny;

  try {
    sendmail(
      $message,
      {
        from => $SMTP_ENVELOPE_FROM_ADDRESS,
        transport => Email::Sender::Transport::SMTP->new({
            host => $SMTP_HOSTNAME,
            port => $SMTP_PORT,
        })
      }
    );
  } catch {
      warn "sending failed: $_";
  };





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oscar999

送以玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值