文章详细

热点文章

最新评论

  • 2016-5-20 12:10:37yummy

    博主,有这个连连看游戏的源码么?太强了

  • 2016-1-8 12:21:02天之蓝

    谢谢楼主共享,正好有用到

  • 2016-1-5 14:59:35远走

    中午乱码不需要修改源码。 1.生成乱码只需在调用MultiFormatWriter.encode()方法的时候把utf8编

  • 2016-1-5 14:59:22远走

    中午乱码不需要修改源码。 1.生成乱码只需在调用MultiFormatWriter.encode()方法的时候把utf8编

  • 2015-12-21 11:07:42mhd

    您好,谢谢您的分享。 我想用flash分别采集两个或两个以上麦克风传进来声音,这个能实现吗?

  • 2015-11-17 17:01:50上品户外

    顶一下 谢谢博主分享

  • 2015-11-5 9:44:55自由职业

    加油,看好你哦。

  • 2015-9-12 22:46:02大雁

    大牛的经验值得学习,烦请大牛发一份源码个到邮箱,多谢

  • 2015-7-17 16:27:38bobojs

    大哥 你太牛了~~ 我以前 改过老版本的 zxing 中文乱码,网上找的 就能解决~用了 zxing 2.2 很多代码都不一

  • 2015-7-4 16:06:32中山婚纱摄影

    学习了,不错

AS3 SMTPMailer的一点功能改进

 发布日期:2013-8-4 8:07:05 点击:515 回复:1

上次提到做一个项目要用到发送邮件的功能,于是在Github上找了个不错的类库,叫SMTPMailer。

但是后期使用的时候仍然发现了几点小问题:

1.不能添加多个收件人。

2.发送的参数中包含一些中文字符就会出现乱码现象。

说明:测试使用126邮箱向126及qq邮箱发送邮件,使用文本方式及html方式都有。

针对第一点,我添加了个检测多邮箱的方法在SMTPMailer里面(多个邮箱使用 ; 分割)

 

public function checkMultiTo(queue:Array, to:String):Array {
	if (to.indexOf('; ') > 0) {
		var emails:Array = to.split('; ');
		emails = emails.map(function(item:*, i:int, all:Array):String {
			return 'RCPT TO: <' + item + '>';
		});
		return [queue[0]].concat(emails).concat(queue.slice(2));
	}else {
		return queue;
	}
}

 

SMTPMailer中发不同格式的邮件是分几个方法写出的

sendAttachedMail:发送包含附件的邮件

sendHTMLMail:发送包含HTML格式内容的邮件

sendPlainTextMail:发送纯文本邮件

sendTestMail:发送测试邮件

要在这几个函数中加入队列前调用检测多个接收邮箱的函数

//调整队列为多个接收邮件
c = this.checkMultiTo(c, pDest);
//加入队列并开始
addToQueue(c);
startQueue();

 

原理就是在开始前调整队列,RFC说明是"RCPT TO:"可以发送多次来指定多个接收邮箱,调整队列的时候就将这个取出来,根据邮箱这个参数生成多条指令,再插入原来的位置就可以了。

针对第二个问题,基本上可以判断是编码问题,RFC标准是以ASCII码来发送的,邮件内容部分有明确的开始和结束,一般不会影响到,一般是指定发件人别名,邮件标题时会出现这种情况,导致MIME Version和Content-Type指令不能被识别,而混入邮件内容,就好像是乱码了。

那这里就在生成队列前把这两个字段用UTF-8编码就可以了。看了下网上很多例子的编码格式,是以指定的字符串起始和结尾,中间使用BASE64编码

同样,需要在SMTPMailer上添加一个编码方法,很简单

public function UTF8Encode(str:String):String {
	return '=?utf-8?B?'+Base64.encode64String(str)+'?=';
}

然后在每个发送函数的生成队列前就对需要编码的参数编码

//对两个字段编码
pSubject = this.UTF8Encode(pSubject);
fromName = this.UTF8Encode(fromName);
//下面开始生成队列
var c:Array = [ "MAIL FROM: <" + pFrom + ">",

测试了下,126和qq的接收识别都正常了。

我来评论

请填写您的称呼

   

最新评论