給APP增加了一個用戶反饋的小功能,由於懶的搭服務器,所以就用郵件的形式進行通信,有如下兩種方式:
1.使用調用手機上的其他程序完成郵件發送
2.使用javamail進行郵件發送
這里果斷使用javamail,因為我們大多數並不會在手機上使用郵件APP
使用javamail需要三個jar包,分別是additional.jar、mail.jar和activation.jar,可以到google官網下載:https://code.google.com/archive/p/javamail-android/downloads
我當時是因為沒法上google的域名,baidu了好多,導包之后各種 java.lang.NoClassDefFoundError: javax.activation.DataHandler 錯誤,這是因為導入的activation.jar包有問題,這里放上從google下載的:
http://download.csdn.net/detail/u012062785/9685867
eclipse導入jar包方法:
1.在項目的根目錄下,新建文件夾libs,將下載的3個jar包放入該文件夾
2.選中項目,右鍵->Properties->Java Build Path->Libraries,選擇Add External JARs,找到項目下lib目錄的3個jar包,完成導入
接下來直接上源碼
1 package com.pngcui.testmail; 2 3 import java.util.Properties; 4 5 import javax.mail.Message; 6 import javax.mail.MessagingException; 7 import javax.mail.PasswordAuthentication; 8 import javax.mail.Session; 9 import javax.mail.Transport; 10 import javax.mail.internet.InternetAddress; 11 import javax.mail.internet.MimeMessage; 12 13 14 public class MailSend { 15 16 private String mailContext; 17 18 public MailSend(String context){ 19 this.mailContext = context; 20 } 21 22 public void sendMail() throws MessagingException{ 23 Properties props = new Properties(); 24 //使用smtp代理,且使用網易163郵箱 25 props.put("mail.smtp.host", "smtp.163.cn"); 26 //設置驗證 27 props.put("mail.smtp.auth", "true"); 28 MyAuthenticator myauth = new MyAuthenticator("發件人郵箱@163.com", "密碼"); 29 Session session = Session.getInstance(props,myauth); 30 //打開調試開關 31 session.setDebug(true); 32 MimeMessage message = new MimeMessage(session); 33 InternetAddress fromAddress = null; 34 //發件人郵箱地址 35 fromAddress = new InternetAddress("發件人郵箱@163.com"); 36 message.setFrom(fromAddress); 37 38 InternetAddress toAddress = new InternetAddress("收件人郵箱地址"); 39 message.addRecipient(Message.RecipientType.TO, toAddress); 40 message.setSubject("郵件標題"); 41 message.setText(mailContext);// 設置郵件內容 42 //message.setFileName("郵件附件"); 43 message.saveChanges(); //存儲信息 44 45 46 Transport transport = null; 47 transport = session.getTransport("smtp"); 48 transport.connect("smtp.163.com", "發件人郵箱@163.com", "密碼"); 49 transport.sendMessage(message, message.getAllRecipients()); 50 51 transport.close(); 52 } 53 54 class MyAuthenticator extends javax.mail.Authenticator { 55 private String strUser; 56 private String strPwd; 57 58 public MyAuthenticator(String user, String password) { 59 this.strUser = user; 60 this.strPwd = password; 61 } 62 63 @Override 64 protected PasswordAuthentication getPasswordAuthentication() { 65 return new PasswordAuthentication(strUser, strPwd); 66 } 67 } 68 }
最后附錄幾個我遇到的問題
1.Authentication認證失敗,是因為你的密碼或者郵箱地址有誤,163的郵箱盡量不要使用新申請的,而且這個密碼是客戶端授權密碼,不是你的郵箱登錄密碼!
2. com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp4,遇到這個問題是被反垃圾了==,在郵件標題或者郵件正文不要出現test或者helloworld的內容,否則網易會認為是垃圾郵件,導致無法發送出去。無法發送的原因可以參考http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
最后調用new MailSend("郵件正文").sendMail();就可以發送出去了!!