Android開發之JavaMail發送郵件(用戶反饋)


給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();就可以發送出去了!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM