Android 메 일 발송 인 스 턴 스 빠 른 구현
현재 안 드 로 이 드 네 이 티 브 앱 으로 메 일 을 보 내 는 수 요 는 드 물 지만 얼마 전 회사 프로젝트 가 안 드 로 이 드 앱 내부 에서 메 일 을 보 내야 하기 때문에 인터넷 에서 자 료 를 수집 하고 데 모 를 정리 했다.마지막 으로 이 수요 가 줄 었 지만 데모 의 내용 을 공유 해 드 리 겠 습 니 다.
첫 번 째,제3자 jar 패키지 가 져 오기
Android 에서 메 일 을 보 내 려 면 먼저 additional.jar,mail.jar,activation.jar 세 개의 jar 패키지 에 의존 해 야 합 니 다.구 글 은 다운로드 주 소 를 제공 합 니 다https://code.google.com/archive/p/javamail-android/downloads다운로드 후 의존 에 추가 합 니 다.
두 번 째 단계,관련 클래스 생 성
1.곧 보 낼 메 일 을 대표 하 는 MailInfo 클래스 를 만 듭 니 다.
package com.shidian.mail;
import java.util.Properties;
public class MailInfo {
private String mailServerHost;// IP
private String mailServerPort;//
private String fromAddress;//
private String toAddress; //
private String userName;//
private String password;//
private boolean validate = true;//
private String subject;//
private String content;//
private String[] attachFileNames;//
/**
*
*/
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.인증 클래스 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.메 일 발송 클래스 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;
/**
*
*/
public class MailSender {
/**
*
* @param mailInfo
*/
public boolean sendTextMail(final MailInfo mailInfo) {
//
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// ,
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// 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 {
// session
Message mailMessage = new MimeMessage(sendMailSession);
//
Address from = new InternetAddress(mailInfo.getFromAddress());
//
mailMessage.setFrom(from);
// ,
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to);
//
mailMessage.setSubject(mailInfo.getSubject());
//
mailMessage.setSentDate(new Date());
//
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
//
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
/**
* HTML
* @param mailInfo
*/
public static boolean sendHtmlMail(MailInfo mailInfo) {
//
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
// ,
if (mailInfo.isValidate()) {
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
}
// session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// session
Message mailMessage = new MimeMessage(sendMailSession);
//
Address from = new InternetAddress(mailInfo.getFromAddress());
//
mailMessage.setFrom(from);
// ,
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
//
mailMessage.setSubject(mailInfo.getSubject());
//
mailMessage.setSentDate(new Date());
// MiniMultipart , MimeBodyPart
Multipart mainPart = new MimeMultipart();
// HTML MimeBodyPart
BodyPart html = new MimeBodyPart();
// HTML
html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// MiniMultipart
mailMessage.setContent(mainPart);
//
Transport.send(mailMessage);
return true;
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
/**
*
* @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;
}
}
/**
*
* @return
*/
private Message createAttachmentMail(final MailInfo info, File file) {
//
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);
//
//
Address from = new InternetAddress(info.getFromAddress());
//
message.setFrom(from);
// ,
Address to = new InternetAddress(info.getToAddress());
// , Message.RecipientType.TO TO
message.setRecipient(Message.RecipientType.TO, to);
//
message.setSubject(info.getSubject());
// , , CharSet=UTF-8
MimeBodyPart text = new MimeBodyPart();
text.setContent(info.getContent(), "text/html;charset=UTF-8");
//
MimeMultipart mp = new MimeMultipart();
mp.addBodyPart(text);
//
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", " ");
e.printStackTrace();
}
//
return message;
}
}
세 번 째,메 일 발송여기 예 를 들 어 텍스트 메 일과 첨부 파일 이 있 는 메 일 을 보 냅 니 다.
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());
}
}
다음은 메 일 을 보 낸 Send MailUtil 입 니 다.
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 = "[email protected]";
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 = "[email protected]";
// private static final String FROM_PSW = "teprinciple163";
//// private static final String TO_ADD = "[email protected]";
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); //
mailInfo.setToAddress(toAdd); //
mailInfo.setSubject("Hello"); //
mailInfo.setContent("Android "); //
return mailInfo;
}
}
특히 주의:반드시 메 일 박스 POP 3/IMAP/SMTP 서 비 스 를 열 어야 합 니 다.그렇지 않 으 면 인증 에 실패 합 니 다.프로젝트 주소:https://github.com/teprinciple/SendMailDemo
demo 다운로드 주소:SendMailDemo_jb51.rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.