上文,周报发邮件的功能做好了之后,发现邮件里面收到的内容跟页面上看到的内容,样式完全不同。一开始以为要用CSS做下样式,结果一看源代码,尼玛内容都是纯文本啊!满屏全是空格……

然后就看文档:

http://apidoc.sinaapp.com/sae/SaeMail.html

里面提到setOpt可以指定content_type为"HTML",所以就按这个来吧,通过setOpt和send函数一起来用。

但是问题在于,这个setOpt到底咋用法?看文档完全没有懂……

那就搜吧。在网上搜到这个:

http://blog.neverbest.com/?p=1071

里面给了这么一段代码:

  1. $mail = new SaeMail(); 
  2. $mail->setOpt( array(  
  3.     'from' => 'notsupport',  
  4.     'to' => 'a@163.com,b@163.com',  
  5.     'smtp_host' => 'smtp.gmail.com',  
  6.     'smtp_port' => '587',  
  7.     'smtp_username' => 'x@gmail.com',  
  8.     'smtp_password' => '121212',  
  9.     'subject' => 'subjuct',  
  10.     'content' => 'content'
  11.     'tls' => true 
  12.     ) ); 
  13.  
  14. $ret = $mail->send(); 
  15. //发送失败时输出错误码和错误信息 
  16. if ($ret === false) 
  17.     var_dump($mail->errno(), $mail->errmsg()); 

有现成的就照搬呗,我就照搬了过来:

  1. function just_send_email( $to$subject$content ) 
  2.      
  3.     $content = strip_tags($content'<h4><h5><p>'); 
  4.  
  5.     if( c('smtp') ) 
  6.     { 
  7.         $mail = new SaeMail(); 
  8.         //$ret = $mail->quickSend( $to , $subject , $content , c('smtp_user') , c('smtp_password') ); 
  9.          
  10.         $mail->setOpt( array(  
  11.             'from' => 'test',  
  12.             'to' => $to,  
  13.             'smtp_host' => 'smtp.gmail.com',  
  14.             'smtp_port' => '587',  
  15.             'smtp_username' => c('smtp_user'),  
  16.             'smtp_password' => c('smtp_password'),  
  17.             'subject' => $subject,  
  18.             'content' => $content
  19.             'content_type' => "HTML"
  20.             'tls' => true 
  21.         ) ); 
  22.   
  23.         $ret = $mail->send(); 
  24.          
  25.         if ($ret === false) 
  26.         var_dump($mail->errno(), $mail->errmsg()); 
  27.     } 
  28.      

结果发现邮件怎么都发不出来……

就这样从下午折腾到晚上,翻来覆去的实验,怎么都搞不出来。

找到SAEmail的代码看了半天,也看不出所以然。

然后,不知道怎么了,就想到了上SAE的后台看看,然后就发现了……

尼玛全是Auth Login Failed啊!

不过这神马Auth Login Failed到底是啥意思?

然后就上微博上找 @SinaAppEngine 和 @Easy 大求救去了。结果刚发出去没两分钟,忽然发现一个很醒目的答案:

smtp.gmail.com:25

所以,问题解决。最终代码是这样的:

  1. function just_send_email( $to, $subject, $content ) 
  2.     $to = $to; 
  3.     $subject = $subject; 
  4.     $content = strip_tags($content, '<h4><h5><p>'); 
  5.  
  6.     if( c('smtp') ) 
  7.     { 
  8.         $mail = new SaeMail(); 
  9.         //$ret = $mail->quickSend( $to , $subject , $content , c('smtp_user') , c('smtp_password') ); 
  10.          
  11.         $mail->setOpt( array(  
  12.             'from' => 'test',  
  13.             'to' => $to,  
  14.             'smtp_host' => 'smtp.gmail.com',  
  15.             'smtp_port' => 587,  
  16.             'smtp_username' => c('smtp_user'),  
  17.             'smtp_password' => c('smtp_password'),  
  18.             'subject' => $subject,  
  19.             'content' => $content, 
  20.             'content_type' => "HTML", 
  21.             'tls' => true 
  22.         ) ); 
  23.   
  24.         $ret = $mail->send(); 
  25.          
  26.         if ($ret === false) 
  27.         var_dump($mail->errno(), $mail->errmsg()); 
  28.     } 
  29.      

好吧,这个故事告诉我们,从google的搜索结果直接扒来的东西是不咋可靠的。这个故事还告诉我们,要养成处理int输出用intval,处理string输出用trim和strip_tags的好习惯。

最后,SAEmail还是有一个问题的,就是当我在定义from字段为中文的时候,日志会报“MAIL FROM failed: '555 5.5.2 Syntax error.”的错误,换成英文就没事了。话说from的意思不是发信人吗?发信人叫做中文名字不是很正常吗?还是说我把from的意思理解错了?

总之,就这样了··

感谢 livemoon_deadsunAlhepkobeEasy 等朋友们的关注和帮忙~