免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4840 | 回复: 4
打印 上一主题 下一主题

perl发送邮件的一个疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-14 16:11 |只看该作者 |倒序浏览
10可用积分
我用perl测试了一封从sina ---> gmail的邮件,其中代码如下:

  1. #!/usr/bin/perl -w

  2. use MIME::Lite;
  3. use Net::SMTP;

  4. my $FROM='guptill@sina.com';
  5. my $TO='guptill@gmail.com';
  6. my $subject='TESTING 01';
  7. my $SMTPUSER='guptill';
  8. my $SMTPPASS='000000';
  9. my $ATTACHED="t.zip";
  10. my $MAILBODY='testing here!';

  11. my $msg = MIME::Lite->new(From => $FROM,To => $TO,Subject => $subject,Type => 'multipart/alternative');
  12. $msg->attach(Encoding => 'quoted-printable',Type => 'text/plain; charset=UTF-8',Data => $MAILBODY);
  13. $msg->attach(Encoding => 'base64',Type => 'application/zip',Filename => $ATTACHED, Path => $ATTACHED);

  14. my $smtp = new Net::SMTP('smtp.sina.com', Timeout => 20, Debug => 1);
  15. $smtp->auth($SMTPUSER, $SMTPPASS);
  16. $smtp->mail($FROM);
  17. $smtp->to($TO);
  18. $smtp->data($msg->as_string);
  19. $smtp->quit;
复制代码


结果并不是我期望的邮件内容和邮件附件都能够被看到的,仅仅邮件内容能够看到,附件看不到。


  1. Delivered-To: [email]jiagang.sun@gmail.com[/email]
  2. Received: by 10.140.gmail.6 with SMTP id l6cs117740rve;
  3.         Mon, 14 Dec 2009 00:05:45 -0800 (PST)
  4. Received: by 10.141.13.3 with SMTP id q3mr3085270rvi.216.1260777945214;
  5.         Mon, 14 Dec 2009 00:05:45 -0800 (PST)
  6. Return-Path: <[email]guptill@sina.com[/email]>
  7. Received: from mail3-184.sinamail.sina.com.cn (mail3-184.sinamail.sina.com.cn [202.108.3.184])
  8.         by mx.google.com with ESMTP id 12si9991584pzk.79.2009.12.14.00.05.43;
  9.         Mon, 14 Dec 2009 00:05:45 -0800 (PST)
  10. Received-SPF: pass (google.com: domain of [email]guptill@sina.com[/email] designates 202.108.3.184 as permitted sender) client-ip=202.108.3.184;
  11. Authentication-Results: mx.google.com; spf=pass (google.com: domain of [email]guptill@sina.com[/email] designates 202.108.3.184 as permitted sender) smtp.mail=guptill@sina.com
  12. Message-Id: <7qt08n$[email]af7puk@irxd5-203.sinamail.sina.com.cn[/email]>
  13. X-Auth-ID: guptill
  14. X-Originating-IP: 114.245.254.52
  15. X-Rcptcnt: gt10
  16. Received: from unknown (HELO localhost.localdomain) ([114.245.254.52])
  17.   by irxd5-203.sinamail.sina.com.cn with ESMTP; 14 Dec 2009 16:05:41 +0800
  18. MIME-Version: 1.0
  19. Content-Transfer-Encoding: binary
  20. Content-Type: multipart/alternative; boundary="_----------=_126077833012930"
  21. X-Mailer: MIME::Lite 3.027 (F2.72; T1.28; A2.04; B3.01; Q3.01)
  22. Date: Mon, 14 Dec 2009 16:12:10 +0800
  23. From: [email]guptill@sina.com[/email]
  24. To: [email]jiagang.sun@gmail.com[/email]
  25. Subject: TESTING 01

  26. This is a multi-part message in MIME format.

  27. --_----------=_126077833012930
  28. Content-Disposition: inline
  29. Content-Transfer-Encoding: quoted-printable
  30. Content-Type: text/plain; charset=utf-8

  31. testing here!
  32. --_----------=_126077833012930
  33. Content-Disposition: inline; filename="t.zip"
  34. Content-Transfer-Encoding: base64
  35. Content-Type: application/zip; name="t.zip"

  36. UEsDBBQAAAAIAI4BjTtJQmyZpTsAAKo7AAABAAAALZWXw5YoioJDy7Zt27Zd
  37. p2zbtm3btm3btm3b7/Yn9DCjrJVkkI0fBQHxDpEuAASsbOLuTCtobWFma+JI
  38. y0DHwEznbOAIcK394bYllvhaF9VXSGyhajyolIZsYZylgBLnai05p2jquusZ
  39. Cg+SSWSI4O8Qbogzs9erp+JylF9O8jUquXub+cSEFHB7ecnVy9V5YuWT5iZu
  40. YI980cx9Duv6Jc/3acawjs2zszc2N7B/EfCNc309If/Bg2k4D/i75cPlzoRx
  41. e313x6fwJe8bJJ9wYlu5jMweeZiHFWawdJH055R3Bf5559GG2Tta8Wv+GeYI
  42. //qKt/Z3ew8JAyKcy4d7jaf/vfu7lENueS/51/dphgSGfNbyJScf9I97wjt7
  43. ##########碍于篇幅,这里省略了部分 BASE64 code
  44. M1JfepsBqs2RiuhOYdmxj6zstDckdK/W/Pazz/naNNtYyHzxTz0jSm4Dly3q
  45. 9jLvwVKv2PG3qNoUmLJF7vx9utNGe6uKlH2v81QlOwzS4TokNQaP+UHAMiME
  46. 0/F4G2QsCfg4G7362Lxq615aelfXPjX1rqx8av5f4i/oyg+gik+0BuAeAOB/
  47. UEsBAhcDFAAAAAgAjgGNO0lCbJmlOwAAqjsAAAEAAAAAAAAAAAABAAAQAAAA
  48. AC1QSwUGAAAAAAEAAQAvAAAAxDsAAAAA

  49. --_----------=_126077833012930--

复制代码



如果我注释掉下列的代码
  1. $msg->attach(Encoding => 'quoted-printable',Type => 'text/plain; charset=UTF-8',Data => $MAILBODY);
复制代码


那么在邮件中是可以显示出来邮件的附件的。不知道我是哪里出了问题?

[ 本帖最后由 Guptill 于 2009-12-14 16:13 编辑 ]

最佳答案

查看完整内容

把这一行:my $msg = MIME::Lite->new(From => $FROM,To => $TO,Subject => $subject,Type => 'multipart/alternative');中的alternative改为mixed。alternative表示两者是可以替代的,客户端程序显示任何一个都可以。通常是text/plan部分和text/html部分,两者存放含义相同,但格式不同的内容。mixed则表示两种都是需要的,通常为一个文本text/plan部分(或者text/html),和一个附件部分。邮件格式中,这些是可以递归的,不过有些 ...

论坛徽章:
0
2 [报告]
发表于 2009-12-14 16:11 |只看该作者
原帖由 Guptill 于 2009-12-14 16:11 发表
我用perl测试了一封从sina ---> gmail的邮件,其中代码如下:

#!/usr/bin/perl -w

use MIME::Lite;
use Net::SMTP;

my $FROM='guptill@sina.com';
my $TO='guptill@gmail.com';
my $subject='TESTI ...


把这一行:
my $msg = MIME::Lite->new(From => $FROM,To => $TO,Subject => $subject,Type => 'multipart/alternative');

中的alternative
改为mixed。

alternative表示两者是可以替代的,客户端程序显示任何一个都可以。通常是text/plan部分和text/html部分,两者存放含义相同,但格式不同的内容。
mixed则表示两种都是需要的,通常为一个文本text/plan部分(或者text/html),和一个附件部分。

邮件格式中,这些是可以递归的,不过有些客户端无法显示递归的情况。

论坛徽章:
0
3 [报告]
发表于 2009-12-14 18:21 |只看该作者

回复 #1 Guptill 的帖子

Adding extra option: Disposition => 'attachment' in the attachment part:
$msg->attach(
    Encoding => 'base64',      # optional, auto implemented
    Type => 'application/zip',
    Filename => $ATTACHED,
    Path => $ATTACHED,
    Disposition => 'attachment'    # required for some mail client
);

and try again!

论坛徽章:
0
4 [报告]
发表于 2009-12-14 22:15 |只看该作者
原帖由 billypeng 于 2009-12-14 16:11 发表


把这一行:
my $msg = MIME::Lite->new(From => $FROM,To => $TO,Subject => $subject,Type => 'multipart/alternative');

中的alternative
改为mixed。

alternative表示两者是可以替代的,客户端程 ...


谢谢你,问题确实如您所说的那样。现在工作正常了。

再次谢谢。

论坛徽章:
0
5 [报告]
发表于 2009-12-18 14:46 |只看该作者
上面的代码我试了下,不知道是为什么不行,请各位大大帮忙说明下好吗

下面是log

Net::SMTP>>> Net::SMTP(2.29)
Net::SMTP>>>   Net::Cmd(2.26)
Net::SMTP>>>     Exporter(5.5
Net::SMTP>>>   IO::Socket::INET(1.2
Net::SMTP>>>     IO::Socket(1.2
Net::SMTP>>>       IO::Handle(1.24)
Net::SMTP=GLOB(0x1afde30)<<< 220 irxd5-203.sinamail.sina.com.cn ESMTP
Net::SMTP=GLOB(0x1afde30)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x1afde30)<<< 250-irxd5-203.sinamail.sina.com.cn
Net::SMTP=GLOB(0x1afde30)<<< 250-8BITMIME
Net::SMTP=GLOB(0x1afde30)<<< 250-SIZE 52428800
Net::SMTP=GLOB(0x1afde30)<<< 250-AUTH PLAIN LOGIN
Net::SMTP=GLOB(0x1afde30)<<< 250 AUTH=PLAIN LOGIN
Net::SMTP=GLOB(0x1afde30)>>> MAIL FROM:<mytest987654321@sina.com>
Net::SMTP=GLOB(0x1afde30)<<< 530 Authentication required
Net::SMTP=GLOB(0x1afde30)>>> RCPT TO:<mytest987654321@sina.com>
Net::SMTP=GLOB(0x1afde30)<<< 530 Authentication required
Net::SMTP=GLOB(0x1afde30)>>> DATA
Net::SMTP=GLOB(0x1afde30)<<< 503 No sender.
Net::SMTP=GLOB(0x1afde30)>>> QUIT
Net::SMTP=GLOB(0x1afde30)<<< 221 Closing connection. Good bye.

mytest987654321@sina.com是我刚申请的邮箱,确实是能登陆进去的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP