免费注册 查看新帖 |

Chinaunix

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

用Net::SMTP_auth遇到中文乱码!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-05 23:44 |只看该作者 |倒序浏览
10可用积分
#!/usr/bin/perl -w
use Net::SMTP_auth;
$smtp = Net::SMTP_auth->new('smtp.126.com', Debug => 1);
$smtp->auth('LOGIN','user','passwd');

$smtp->mail('user@126.com');
$smtp->to('user1@126.com');
$smtp->data();

$smtp->datasend("Content-Type:text/plain;charset=GB2312\n");

$smtp->datasend("Content-Transfer-Encoding:8bit\n");
$smtp->datasend("Subject:你好吗\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message has been sent !嘿,你好!\n");
$smtp->dataend();
$smtp->quit;

邮件发送是成功了,但中文是乱码!!!我是新手,分给的不多,请大家帮帮忙^_^

最佳答案

查看完整内容

我曾经遇到了同样的问题,然后查看foxmail发送邮件的数据包,并查看邮件的原始信息,解决了,你看看我的代码。

论坛徽章:
0
2 [报告]
发表于 2008-05-05 23:44 |只看该作者
我曾经遇到了同样的问题,然后查看foxmail发送邮件的数据包,并查看邮件的原始信息,解决了,你看看我的代码。

  1. #!/usr/bin/perl

  2. use warnings;
  3. use strict;
  4. use MIME::Base64;
  5. use Net::SMTP::SSL;

  6. my $smtp_server = 'smtp.test.com';
  7. my $smtp_port = '465';
  8. my $username = 'user';
  9. my $password = 'passwd';
  10. my $from_mail = 'yunshu@test.com';
  11. my @to_mails = ( 'icy@test.com' );
  12. my $subject = encode_base64( '(测试邮件)请您修改域密码', ' ' );

  13. open(FH, "mail.txt") or die "$!";
  14. local($/) = undef;
  15. my $mail_body = <FH>;
  16. close( FH );
  17. $/ = "\n";

  18. $mail_body = encode_base64( $mail_body, ' ' );

  19. my $smtp = Net::SMTP::SSL -> new( Host => $smtp_server,
  20.                                                                         Port => $smtp_port,
  21.                                                                         Hello => $smtp_server,
  22.                                                                         Debug   => 1 ) || die "Can't connect $smtp_server:$smtp_port: $!\n";

  23. $smtp -> auth( $username, $password ) || die "Can't authenticate: $!\n";

  24. foreach my $to_mail( @to_mails )
  25. {
  26.         $smtp -> mail( $from_mail );
  27.         $smtp -> to( $to_mail );
  28.         $smtp -> data( );
  29.        
  30.         # send mail head
  31.         $smtp -> datasend( "Content-Type: text/plain; charset=gb2312 \n" );
  32.         $smtp -> datasend( "Content-Transfer-Encoding: base64\n" );
  33.         $smtp -> datasend( "From: $from_mail\n" );
  34.         $smtp -> datasend( "To: $to_mail\n" );
  35.         $smtp -> datasend( "Subject: =?gb2312?B?$subject?=\n\n");
  36.        
  37.         # send mail body
  38.         $smtp -> datasend( $mail_body );
  39.         $smtp -> dataend();
  40. }

  41. $smtp -> quit();
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2008-05-06 00:30 |只看该作者
既然是新手,那就用 Mail::Sender 吧。

论坛徽章:
0
4 [报告]
发表于 2008-05-06 09:04 |只看该作者

回复 #1 zhenggb 的帖子

邮件中文乱码都是编码问题...你把 charset=GB2312  改成charset=UTF-8,  或者  charset=GBK 试试.

求职 : 数据库管理员
论坛徽章:
0
5 [报告]
发表于 2008-05-06 09:23 |只看该作者
Email發送的Data數據都需要使用MIME::Entity 之類的MIME工具編碼才可以的.
建議使用Mail::Sender 或 MIME::Lite .

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-05-06 10:22 |只看该作者
楼上的做法是对的。
但是如果用 Mail::Sender 的话,就会更简单些。
另外,邮件相关的协议很多很杂,因此如果直接 Net::SMTP 那简直是恶梦。
无论对新手老手来说,我都不建议使用 Net::SMTP,除非有特殊需要。

论坛徽章:
0
7 [报告]
发表于 2008-05-06 10:32 |只看该作者
恩,下次如果要写脚本可以试试你说的这个。
我主要是要ssl支持,就直接用了Net::SMTP模块。

btw: 最重要的是掌握解决问题的思路,可能做技术不太久的人遇到问题会慌张,慢慢就好了。
今天闲得没事,来帮flw看版块算了,呵呵。

论坛徽章:
0
8 [报告]
发表于 2011-05-13 17:21 |只看该作者
回复 1# zhenggb


我也在用这个Net::SMTP模块来发送邮件,我的需求是这样的,
利用文件句柄打开一个文本文件,如dd.txt,里面是中文的。然后根据楼主给的方法来发。


文本文件中的中文只显示了第一行,后面的要么不显示,要么乱码,这是怎么回事啊?

论坛徽章:
0
9 [报告]
发表于 2011-05-13 17:27 |只看该作者
还有就是如果有发送英文的语句就不行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP