前言
創(chuàng)新互聯(lián)公司是一家專業(yè)提供潛江企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為潛江眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。
現(xiàn)在一般很少有用Android原生app發(fā)送郵件的需求,但是前段時(shí)間公司項(xiàng)目需要在Android app 內(nèi)部發(fā)送郵件,于是就在網(wǎng)上收集資料并整理了一個(gè)Demo。雖然最后這個(gè)需求被減掉了,但是我這里還是把Demo的內(nèi)容給大家分享一下。
第一步、導(dǎo)入第三方j(luò)ar包
Android實(shí)現(xiàn)發(fā)送郵件,首先需要依賴additional.jar、mail.jar和activation.jar這3個(gè)jar包。Google提供了下載地址:https://code.google.com/archive/p/javamail-android/downloads 。下載后添加到依賴(這里我就不詳細(xì)說(shuō)明了)。
第二步、創(chuàng)建相關(guān)類
1、創(chuàng)建MailInfo類,來(lái)代表一個(gè)即將被發(fā)送的郵件
package com.shidian.mail;
import java.util.Properties;
public class MailInfo {
private String mailServerHost;// 發(fā)送郵件的服務(wù)器的IP
private String mailServerPort;// 發(fā)送郵件的服務(wù)器的端口
private String fromAddress;// 郵件發(fā)送者的地址
private String toAddress; // 郵件接收者的地址
private String userName;// 登陸郵件發(fā)送服務(wù)器的用戶名
private String password;// 登陸郵件發(fā)送服務(wù)器的密碼
private boolean validate = true;// 是否需要身份驗(yàn)證
private String subject;// 郵件主題
private String content;// 郵件的文本內(nèi)容
private String[] attachFileNames;// 郵件附件的文件名
/**
* 獲得郵件會(huì)話屬性
*/
public Properties getProperties() {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", validate ? "true" : "false");
return p;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String[] getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(String[] fileNames) {
this.attachFileNames = fileNames;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String textContent) {
this.content = textContent;
}
}
2、創(chuàng)建認(rèn)證類MyAuthenticator
package com.shidian.mail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MyAuthenticator extends Authenticator {
String userName = null;
String password = null;
public MyAuthenticator() {
}
public MyAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
3、創(chuàng)建郵件發(fā)送類MailSender
package com.shidian.mail;
import android.util.Log;
import java.io.File;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
* 發(fā)送器
*/
public class MailSender {
/**
* 以文本格式發(fā)送郵件
* @param mailInfo 待發(fā)送的郵件的信息
*/
public boolean sendTextMail(final MailInfo mailInfo) {
// 判斷是否需要身份認(rèn)證
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
// Session sendMailSession = Session.getInstance(pro, new Authenticator() {
// @Override
// protected PasswordAuthentication getPasswordAuthentication() {
// return new PasswordAuthentication(mailInfo.getUserName(),mailInfo.getPassword());
// }
// });
try {
// 根據(jù)session創(chuàng)建一個(gè)郵件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 創(chuàng)建郵件發(fā)送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 設(shè)置郵件消息的發(fā)送者
mailMessage.setFrom(from);
// 創(chuàng)建郵件的接收者地址,并設(shè)置到郵件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 設(shè)置郵件消息的主題
mailMessage.setSubject(mailInfo.getSubject());
// 設(shè)置郵件消息發(fā)送的時(shí)間
mailMessage.setSentDate(new Date());
// 設(shè)置郵件消息的主要內(nèi)容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 發(fā)送郵件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
/**
* 以HTML格式發(fā)送郵件
* @param mailInfo 待發(fā)送的郵件信息
*/
public static boolean sendHtmlMail(MailInfo mailInfo) {
// 判斷是否需要身份認(rèn)證
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// 如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根據(jù)session創(chuàng)建一個(gè)郵件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 創(chuàng)建郵件發(fā)送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 設(shè)置郵件消息的發(fā)送者
mailMessage.setFrom(from);
// 創(chuàng)建郵件的接收者地址,并設(shè)置到郵件消息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO屬性表示接收者的類型為TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 設(shè)置郵件消息的主題
mailMessage.setSubject(mailInfo.getSubject());
// 設(shè)置郵件消息發(fā)送的時(shí)間
mailMessage.setSentDate(new Date());
// MiniMultipart類是一個(gè)容器類,包含MimeBodyPart類型的對(duì)象
Multipart mainPart = new MimeMultipart();
// 創(chuàng)建一個(gè)包含HTML內(nèi)容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 設(shè)置HTML內(nèi)容
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 將MiniMultipart對(duì)象設(shè)置為郵件內(nèi)容
mailMessage.setContent(mainPart);
// 發(fā)送郵件
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
/**
* 發(fā)送帶附件的郵件
* @param info
* @return
*/
public boolean sendFileMail(MailInfo info, File file){
Message attachmentMail = createAttachmentMail(info,file);
try {
Transport.send(attachmentMail);
return true;
} catch (MessagingException e) {
e.printStackTrace();
return false;
}
}
/**
* 創(chuàng)建帶有附件的郵件
* @return
*/
private Message createAttachmentMail(final MailInfo info, File file) {
//創(chuàng)建郵件
MimeMessage message = null;
Properties pro = info.getProperties();
try {
Session sendMailSession = Session.getInstance(pro, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(info.getUserName(),info.getPassword());
}
});
message = new MimeMessage(sendMailSession);
// 設(shè)置郵件的基本信息
//創(chuàng)建郵件發(fā)送者地址
Address from = new InternetAddress(info.getFromAddress());
//設(shè)置郵件消息的發(fā)送者
message.setFrom(from);
//創(chuàng)建郵件的接受者地址,并設(shè)置到郵件消息中
Address to = new InternetAddress(info.getToAddress());
//設(shè)置郵件消息的接受者, Message.RecipientType.TO屬性表示接收者的類型為TO
message.setRecipient(Message.RecipientType.TO, to);
//郵件標(biāo)題
message.setSubject(info.getSubject());
// 創(chuàng)建郵件正文,為了避免郵件正文中文亂碼問(wèn)題,需要使用CharSet=UTF-8指明字符編碼
MimeBodyPart text = new MimeBodyPart();
text.setContent(info.getContent(), "text/html;charset=UTF-8");
// 創(chuàng)建容器描述數(shù)據(jù)關(guān)系
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
// 創(chuàng)建郵件附件
MimeBodyPart attach = new MimeBodyPart();
FileDataSource ds = new FileDataSource(file);
DataHandler dh = new DataHandler(ds);
attach.setDataHandler(dh);
attach.setFileName(MimeUtility.encodeText(dh.getName()));
mp.addBodyPart(attach);
mp.setSubType("mixed");
message.setContent(mp);
message.saveChanges();
} catch (Exception e) {
Log.e("TAG", "創(chuàng)建帶附件的郵件失敗");
e.printStackTrace();
}
// 返回生成的郵件
return message;
}
}
第三步、發(fā)送郵件
這里舉例發(fā)送文本郵件和帶附件的郵件
package teprinciple.yang.sendmaildemo;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import com.shidian.mail.SendMailUtil;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.toAddEt);
}
public void senTextMail(View view) {
SendMailUtil.send(editText.getText().toString());
}
public void sendFileMail(View view) {
File file = new File(Environment.getExternalStorageDirectory()+File.separator+"test.txt");
OutputStream os = null;
try {
os = new FileOutputStream(file);
String str = "hello world";
byte[] data = str.getBytes();
os.write(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (os != null)os.close();
} catch (IOException e) {
}
}
SendMailUtil.send(file,editText.getText().toString());
}
}
下面是發(fā)送郵件的SendMailUtil
package com.shidian.mail;
import android.support.annotation.NonNull;
import java.io.File;
/**
* Created by Administrator on 2017/4/10.
*/
public class SendMailUtil {
//qq
private static final String HOST = "smtp.qq.com";
private static final String PORT = "587";
private static final String FROM_ADD = "teprinciple@foxmail.com";
private static final String FROM_PSW = "lfrlpganzjrwbeci";
// //163
// private static final String HOST = "smtp.163.com";
// private static final String PORT = "465"; //或者465 994
// private static final String FROM_ADD = "teprinciple@163.com";
// private static final String FROM_PSW = "teprinciple163";
//// private static final String TO_ADD = "2584770373@qq.com";
public static void send(final File file,String toAdd){
final MailInfo mailInfo = creatMail(toAdd);
final MailSender sms = new MailSender();
new Thread(new Runnable() {
@Override
public void run() {
sms.sendFileMail(mailInfo,file);
}
}).start();
}
public static void send(String toAdd){
final MailInfo mailInfo = creatMail(toAdd);
final MailSender sms = new MailSender();
new Thread(new Runnable() {
@Override
public void run() {
sms.sendTextMail(mailInfo);
}
}).start();
}
@NonNull
private static MailInfo creatMail(String toAdd) {
final MailInfo mailInfo = new MailInfo();
mailInfo.setMailServerHost(HOST);
mailInfo.setMailServerPort(PORT);
mailInfo.setValidate(true);
mailInfo.setUserName(FROM_ADD); // 你的郵箱地址
mailInfo.setPassword(FROM_PSW);// 您的郵箱密碼
mailInfo.setFromAddress(FROM_ADD); // 發(fā)送的郵箱
mailInfo.setToAddress(toAdd); // 發(fā)到哪個(gè)郵件去
mailInfo.setSubject("Hello"); // 郵件主題
mailInfo.setContent("Android 測(cè)試"); // 郵件文本
return mailInfo;
}
}
特別注意:一定要打開郵箱POP3/IMAP/SMTP服務(wù),不然認(rèn)證會(huì)失敗

項(xiàng)目地址:https://github.com/teprinciple/SendMailDemo
demo下載地址:SendMailDemo_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
名稱欄目:Android快速實(shí)現(xiàn)發(fā)送郵件實(shí)例
轉(zhuǎn)載源于:http://www.chinadenli.net/article42/pgcdec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、面包屑導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、域名注冊(cè)、云服務(wù)器、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)