设为首页收藏本站

就爱编程论坛

 找回密码
 注册

人人连接登陆

无需注册,直接登录

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 602|回复: 0
打印 上一主题 下一主题

Perl发送邮件 [复制链接]

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    无聊
    2025-5-27 03:37:20
  • 签到天数: 366 天

    [LV.9]以坛为家II

    论坛先锋 学习至圣 荣誉成员 论坛元老 活跃之星 终极领袖

    我玩的应用:

    跳转到指定楼层
    楼主
    发表于 2012-2-4 05:36:11 |只看该作者 |倒序浏览
    #!/usr/bin/perl -w
    use strict;
    use Net::SMTP_auth;

    #smtp邮件服务器和端口
    my $smtpHost = 'smtp.163.com';
    my $smtpPort = '25';
    my $sslPort = '465';

    #smtp服务器认证用户名密码(就是你登陆邮箱的时候的用户名和密码)
    my $username = 'user@163.com';
    my $passowrd = 'password';

    #邮件来自哪儿,要去哪儿,邮件标题
    my $from = 'user@163.com';
    my $to   = 'to@somedomain.com';
    my $subject = '[Notice]测试邮件';

    #设置邮件header
    my $header = << "MAILHEADER";
    From:$from
    To:$to
    Subject:$subject
    Mime-Version:1.0
    Content-Type:text/plain;charset="UTF-8"
    Content-Trensfer-Encoding:7bit

    MAILHEADER

    #设置邮件内容
    my $message = << "MAILBODY";
    在这里写邮件的内容。
    你好,这是来自$from的测试邮件。
    MAILBODY

    #获得邮件域名部分,用于连接的时候表名身份
    my @helo = split /\@/,$from;

    #连接smtp服务器,明文/SSL/TLS三种方式,根据你使用的SMTP支持情况选择一种
    #后2种暂时被我注释了,两个=cut之间的就是被注释的
    #普通方式,通信过程不加密
    my $smtp = Net::SMTP_auth->new(
                    "$smtpHost:$smtpPort",
                    Hello   => $helo[1],
                    Timeout => 30
                    ) or die("Error:连接到$smtpHost失败!");
    $smtp->auth('LOGIN',$username,$passowrd) or die("Error:认证失败!");

    =cut
    #tls加密方式,通信过程加密,邮件数据安全,使用正常的smtp端口
    use Net::SMTP::TLS;
    my $smtp = Net::SMTP::TLS->new(
                    "$smtpHost:$smtpPort",
                    User     => $username,
                    Password => $passowrd,
                    Hello    => $helo[1],
                    Timeout  => 30
                    ) or die "Error:通过TLS连接到$smtpHost失败!";

    #纯粹的ssl加密方式,通信过程加密,邮件数据安全
    use Net::SMTP::SSL;
    my $smtp = Net::SMTP::SSL->new(
                    "$smtpHost:$sslPort",
                    Hello   => $helo[1],
                    Timeout => 30
                    ) or die "Error:通过SSL连接到$smtpHost失败!";
    $smtp->auth($username,$passowrd) or die("Error:认证失败!");
    =cut

    #发送邮件
    $smtp->mail($from);
    $smtp->to($to);
    $smtp->data();
    $smtp->datasend($header);
    $smtp->datasend($message);
    $smtp->dataend();
    $smtp->quit();

    print "OK";
    exit 0;
    后话,如果你有不需要验证的SMTP服务器的话,那么上面的代码中关于验证(auth和用户名密码)的部分就不需要了。更详细的用法还是要用perldoc命令或者去官方查看相关模块的帮助文档。
    另外,可能有的时候,根据你环境的编码格式,可能导致发邮件有乱码现象,这需要使用Encode来转换你的邮件标题和内容的编码格式,并在header里设置正确的charset。
    比如把shiftjis编码格式的邮件标题和内容变成iso-20220-jp编码格式,当然这些转换得根据你实际情况来:
    ?
    1
    2
    3
    4use Encode qw(from_to encode);
    from_to($subject,'shiftjis','iso-2022-jp');
    encode('MIME-Header-ISO_2022_JP',$subject);
    from_to($message,'shiftjis','iso-2022-jp');
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 支持支持0 反对反对0 分享到人人 转发到微博
    [img=http://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=fRUcHhYWGAQ9GxIFEBwUEVMeEhA]http://rescdn.qqmail.com/zh_CN/htmledition/images/function/qm_open/ico_mailme_02.png[/img]

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册 人人连接登陆

    晴云孤魂's Blog|就爱编程搜帖|手机版|Archiver|就爱编程论坛     

    GMT+8, 2025-7-1 19:54 , Processed in 0.126920 second(s), 26 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部