亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android使用Javamail發送Email群發加附件

2019-10-21 21:26:36
字體:
來源:轉載
供稿:網友

之前寫了一篇關于Android中發送Email的文章,里面用到的是隱式的intent來激活系統自帶的郵件發送功能。

今天花了一天來自己實現這個郵件發送功能。

這里用gmail作為發送方的郵箱,其他網易,新浪什么的應該也ok,QQ貌似不行。

下面是實現步驟及相關代碼。

項目添加jar包

將activation.jar,additionnal.jar,mail.jar放到項目的libs 文件夾。然后在項目中選中這三個包,右擊->Build Path->Add to buildPath.

添加成功后項目就像這樣.

Android,Javamail,發送,Email

項目中添加Mail類

package com.example.mailtest;import java.util.Date; import java.util.Properties; import javax.activation.CommandMap; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.activation.MailcapCommandMap; import javax.mail.BodyPart; 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;   public class Mail extends javax.mail.Authenticator {  private String _user;  private String _pass;   private String[] _to;  private String _from;   private String _port;  private String _sport;   private String _host;   private String _subject;  private String _body;   private boolean _auth;   private boolean _debuggable;   private Multipart _multipart;    public Mail() {  _host = "smtp.gmail.com"; // default smtp server  _port = "465"; // default smtp port  _sport = "465"; // default socketfactory port   _user = ""; // username  _pass = ""; // password  _from = ""; // email sent from  _subject = ""; // email subject  _body = ""; // email body   _debuggable = false; // debug mode on or off - default off  _auth = true; // smtp authentication - default on   _multipart = new MimeMultipart();   // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.  MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();  mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");  mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");  mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");  mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");  mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");  CommandMap.setDefaultCommandMap(mc);  }   public Mail(String user, String pass) {  this();   _user = user;  _pass = pass;  }  public void setTo(String[] toArr) { this._to = toArr; }  public void setFrom(String string) { this._from = string; }  public void setSubject(String string) { this._subject = string; } public boolean send() throws Exception {  Properties props = _setProperties();   if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {  Session session = Session.getInstance(props, this);   MimeMessage msg = new MimeMessage(session);   msg.setFrom(new InternetAddress(_from));   InternetAddress[] addressTo = new InternetAddress[_to.length];  for (int i = 0; i < _to.length; i++) {  addressTo[i] = new InternetAddress(_to[i]);  }  msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);   msg.setSubject(_subject);  msg.setSentDate(new Date());   // setup message body  BodyPart messageBodyPart = new MimeBodyPart();  messageBodyPart.setText(_body);  _multipart.addBodyPart(messageBodyPart);  // Put parts in message  msg.setContent(_multipart);  // send email  Transport.send(msg);   return true;  } else {  return false;  }  }   public void addAttachment(String filename) throws Exception {  BodyPart messageBodyPart = new MimeBodyPart();  DataSource source = new FileDataSource(filename);  messageBodyPart.setDataHandler(new DataHandler(source));  messageBodyPart.setFileName(filename);   _multipart.addBodyPart(messageBodyPart);  }   @Override  public PasswordAuthentication getPasswordAuthentication() {  return new PasswordAuthentication(_user, _pass);  }   private Properties _setProperties() {  Properties props = new Properties();   props.put("mail.smtp.host", _host);   if(_debuggable) {  props.put("mail.debug", "true");  }   if(_auth) {  props.put("mail.smtp.auth", "true");  }   props.put("mail.smtp.port", _port);  props.put("mail.smtp.socketFactory.port", _sport);  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  props.put("mail.smtp.socketFactory.fallback", "false");   return props;  }   // the getters and setters  public String getBody() {  return _body;  }   public void setBody(String _body) {  this._body = _body;  }   // more of the getters and setters ….. } 

MailActivity調用

package com.example.mailtest;  import java.util.Properties; import javax.mail.Address;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;    import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.app.ProgressDialog;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.Toast; public class MailActivity extends Activity {  private Button sendBtn; private String username; private String password; private Handler sendHandler; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mail); sendBtn=(Button)findViewById(R.id.btnSend); sendHandler = new Handler(); sendBtn.setOnClickListener(new View.OnClickListener() {  public void onClick(View v) {  SendTask sTask = new SendTask();  sTask.execute(); }  });   }   @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_mail, menu); return true; }    class SendTask extends AsyncTask<Integer, Integer, String>{  //后面尖括號內分別是參數(例子里是線程休息時間),進度(publishProgress用到),返回值 類型   @Override  protected void onPreExecute() {  //第一個執行方法  Toast.makeText(getApplicationContext(), "Begin Send!", Toast.LENGTH_SHORT).show();  super.onPreExecute();  }   @Override  protected String doInBackground(Integer... params) {  //第二個執行方法,onPreExecute()執行完后執行  // TODO Auto-generated method stub  Mail m = new Mail("empty.shen@gmail.com", "*****");   String[] toArr = {"silangquan@gmail.com","k283228391@126.com"};  m.setTo(toArr);  m.setFrom("wooo@wooo.com");  m.setSubject("JavamailTest");  m.setBody("Email body.");   try { //If you want add attachment use function addAttachment. //m.addAttachment("/sdcard/filelocation");   if(m.send()) {   System.out.println("Email was sent successfully.");  } else {   System.out.println("Email was not sent."); }  } catch(Exception e) {  //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();  Log.e("MailApp", "Could not send email", e);  }  return "";  }   @Override  protected void onProgressUpdate(Integer... progress) {  //這個函數在doInBackground調用publishProgress時觸發,雖然調用時只有一個參數  //但是這里取到的是一個數組,所以要用progesss[0]來取值  //第n個參數就用progress[n]來取值   super.onProgressUpdate(progress);  }   @Override  protected void onPostExecute(String r) {  //doInBackground返回時觸發,換句話說,就是doInBackground執行完后觸發  //這里的result就是上面doInBackground執行后的返回值,所以這里是"執行完畢"  //setTitle(result);  super.onPostExecute(r);  }   }  }

這里用到了AsyncTask,應為直接在UI線程中連接互聯網的話,或爆 android.os.NetworkOnMainThreadException異常。

布局文件

主界面的布局文件,非常簡單。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MailActivity" >  <TextView  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_centerHorizontal="true"  android:layout_centerVertical="true"  android:text="@string/hello_world" />  <Button  android:id="@+id/btnSend"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignParentLeft="true"  android:layout_alignParentTop="true"  android:layout_marginTop="19dp"  android:text="Send" /> </RelativeLayout>

運行效果圖:

Android,Javamail,發送,Email

點擊發送后

Android,Javamail,發送,Email

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线观看网站| 日韩大陆欧美高清视频区| 欧美性猛交xxxx久久久| 日本精品性网站在线观看| 国产亚洲美女久久| 97福利一区二区| 国产精品视频xxxx| 在线国产精品播放| 久久久久久久影院| 欧美日韩国产色| 久久久久久国产精品久久| 亚洲精品美女免费| 国产精品大陆在线观看| 国产欧美日韩免费看aⅴ视频| 日韩电影中文字幕一区| 欧美肥臀大乳一区二区免费视频| 粉嫩老牛aⅴ一区二区三区| 久久手机免费视频| 在线精品视频视频中文字幕| 伦理中文字幕亚洲| 日韩欧美亚洲国产一区| 狠狠爱在线视频一区| 久久免费视频这里只有精品| 在线看日韩av| 久久久久久com| 日韩专区在线观看| 国产美女久久精品香蕉69| 91精品国产91久久久久久最新| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美日韩激情美女| 2019国产精品自在线拍国产不卡| 国产69精品久久久久9| 青青草99啪国产免费| 亚洲天堂av电影| 中文字幕亚洲字幕| 亚洲自拍小视频| 欧美国产亚洲视频| 热久久免费视频精品| 国产精品视频yy9099| 国产欧美精品久久久| 九九热视频这里只有精品| 亚洲91精品在线| 欧美日韩亚洲91| 欧美国产日韩中文字幕在线| 色yeye香蕉凹凸一区二区av| 久久精品国产久精国产一老狼| 欧美激情一区二区久久久| 亚洲2020天天堂在线观看| 亚洲国产精品美女| 亚洲精品小视频在线观看| 精品国产网站地址| 精品视频在线播放免| 欧美日韩高清在线观看| 日韩免费av在线| 国产精品久久久久久久久| 国产精品福利无圣光在线一区| 色偷偷av一区二区三区乱| 欧美影院久久久| 亚洲最大中文字幕| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久久久久网站| 日韩成人网免费视频| 日韩av网站电影| 欧美综合在线观看| 亚洲国产另类久久精品| 97在线视频免费观看| 韩国精品美女www爽爽爽视频| 亚洲人成亚洲人成在线观看| 一区二区成人av| 精品一区二区亚洲| 日韩精品在线观看一区二区| 亚洲一区二区自拍| 97在线视频免费播放| 成人在线精品视频| 92国产精品久久久久首页| 中文欧美在线视频| 不卡av电影在线观看| 亚洲电影免费观看高清完整版在线| 国产精品福利网| 国产欧美日韩高清| 69av成年福利视频| 亚洲人成电影网站色…| 欧美风情在线观看| 欧美中文字幕精品| 91美女高潮出水| 国产成人avxxxxx在线看| 91sao在线观看国产| 国产成人免费av| 欧美精品久久久久| 亚洲成人av在线| 国产精品免费网站| 久久6免费高清热精品| 欧美高清自拍一区| 美女黄色丝袜一区| 精品中文字幕久久久久久| 国产精品视频一区二区高潮| 欧美成人中文字幕在线| 日韩免费在线看| 日韩视频在线免费| 亚洲精品按摩视频| 亚洲国产一区二区三区四区| 亚洲国产精品yw在线观看| 国产精品视频一区二区高潮| 久久久成人的性感天堂| 亚洲精品91美女久久久久久久| 日韩在线激情视频| 欧洲美女7788成人免费视频| 中文字幕一精品亚洲无线一区| 日本a级片电影一区二区| 久久99久久99精品免观看粉嫩| 国产综合在线视频| 亚洲综合中文字幕在线观看| 国内精品久久久久伊人av| 国产精品18久久久久久首页狼| 欧美与黑人午夜性猛交久久久| 久久久亚洲天堂| 亚洲精品国产免费| 日韩美女免费观看| 欧美精品在线播放| 俺去亚洲欧洲欧美日韩| 国产精品久久久久久久app| 欧美日韩精品在线视频| 91精品视频观看| 国产精品91免费在线| 最新69国产成人精品视频免费| 亚洲男人天堂久| 亚洲精品网址在线观看| 视频一区视频二区国产精品| 久久免费精品日本久久中文字幕| 欧美另类极品videosbestfree| 欧美性猛交xxxx久久久| 国产精品久久色| 国产精品久久久久免费a∨大胸| 日韩激情视频在线播放| 久久精品成人欧美大片古装| 久久久久久久久久亚洲| 4438全国亚洲精品在线观看视频| 亚洲韩国青草视频| 日本中文字幕不卡免费| 亚洲欧美三级伦理| 中文字幕欧美日韩精品| 色黄久久久久久| 国产91精品青草社区| 岛国av在线不卡| 久久久久久久久中文字幕| 亚洲欧洲美洲在线综合| 亚洲自拍偷拍色片视频| 国产精品福利观看| 日韩美女在线观看一区| 在线不卡国产精品| 狠狠色香婷婷久久亚洲精品| 精品国产依人香蕉在线精品| 正在播放欧美视频| 国产亚洲精品久久久久动| 国产精品激情av电影在线观看| 国产精品一区专区欧美日韩| 中文字幕精品国产| 国产一区二区三区在线播放免费观看| 亚洲精品按摩视频| 亚洲激情视频在线观看| 欧美日韩人人澡狠狠躁视频| www.日韩av.com| 欧美黄网免费在线观看| 久久久久久久久久久免费|