接上文,周报发邮件的功能做好了之后,发现邮件里面收到的内容跟页面上看到的内容,样式完全不同。一开始以为要用CSS做下样式,结果一看源代码,尼玛内容都是纯文本啊!满屏全是空格……
然后就看文档:
http://apidoc.sinaapp.com/sae/SaeMail.html
里面提到setOpt可以指定content_type为"HTML",所以就按这个来吧,通过setOpt和send函数一起来用。
但是问题在于,这个setOpt到底咋用法?看文档完全没有懂……
那就搜吧。在网上搜到这个:
http://blog.neverbest.com/?p=1071
里面给了这么一段代码:
- $mail = new SaeMail();
- $mail->setOpt( array(
- 'from' => 'notsupport',
- 'to' => '[email protected],[email protected]',
- 'smtp_host' => 'smtp.gmail.com',
- 'smtp_port' => '587',
- 'smtp_username' => '[email protected]',
- 'smtp_password' => '121212',
- 'subject' => 'subjuct',
- 'content' => 'content',
- 'tls' => true
- ) );
- $ret = $mail->send();
- //发送失败时输出错误码和错误信息
- if ($ret === false)
- var_dump($mail->errno(), $mail->errmsg());
有现成的就照搬呗,我就照搬了过来:
- function just_send_email( $to, $subject, $content )
- {
- $content = strip_tags($content, '
'
);- if( c('smtp') )
- {
- $mail = new SaeMail();
- //$ret = $mail->quickSend( $to , $subject , $content , c('smtp_user') , c('smtp_password') );
- $mail->setOpt( array(
- 'from' => 'test',
- 'to' => $to,
- 'smtp_host' => 'smtp.gmail.com',
- 'smtp_port' => '587',
- 'smtp_username' => c('smtp_user'),
- 'smtp_password' => c('smtp_password'),
- 'subject' => $subject,
- 'content' => $content,
- 'content_type' => "HTML",
- 'tls' => true
- ) );
- $ret = $mail->send();
- if ($ret === false)
- var_dump($mail->errno(), $mail->errmsg());
- }
- }
结果发现邮件怎么都发不出来……
就这样从下午折腾到晚上,翻来覆去的实验,怎么都搞不出来。
找到SAEmail的代码看了半天,也看不出所以然。
然后,不知道怎么了,就想到了上SAE的后台看看,然后就发现了……
尼玛全是Auth Login Failed啊!
不过这神马Auth Login Failed到底是啥意思?
然后就上微博上找 @SinaAppEngine 和 @Easy 大求救去了。结果刚发出去没两分钟,忽然发现一个很醒目的答案:
smtp.gmail.com:25
所以,问题解决。最终代码是这样的:
- function just_send_email( $to, $subject, $content )
- {
- $to = $to;
- $subject = $subject;
- $content = strip_tags($content, '<h4><h5><p>');
- if( c('smtp') )
- {
- $mail = new SaeMail();
- //$ret = $mail->quickSend( $to , $subject , $content , c('smtp_user') , c('smtp_password') );
- $mail->setOpt( array(
- 'from' => 'test',
- 'to' => $to,
- 'smtp_host' => 'smtp.gmail.com',
- 'smtp_port' => 587,
- 'smtp_username' => c('smtp_user'),
- 'smtp_password' => c('smtp_password'),
- 'subject' => $subject,
- 'content' => $content,
- 'content_type' => "HTML",
- 'tls' => true
- ) );
- $ret = $mail->send();
- if ($ret === false)
- var_dump($mail->errno(), $mail->errmsg());
- }
- }
好吧,这个故事告诉我们,从google的搜索结果直接扒来的东西是不咋可靠的。这个故事还告诉我们,要养成处理int输出用intval,处理string输出用trim和strip_tags的好习惯。
最后,SAEmail还是有一个问题的,就是当我在定义from字段为中文的时候,日志会报“MAIL FROM failed: '555 5.5.2 Syntax error.”的错误,换成英文就没事了。话说from的意思不是发信人吗?发信人叫做中文名字不是很正常吗?还是说我把from的意思理解错了?
总之,就这样了··
感谢 livemoon_deadsun,Alhep,kobe,Easy 等朋友们的关注和帮忙~