麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > 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("[email protected]", "*****");   String[] toArr = {"[email protected]","[email protected]"};  m.setTo(toArr);  m.setFrom("[email protected]");  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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲国产精品99 | 国产精品久久久久久久四虎电影 | 草莓福利社区在线 | 国产午夜精品一区二区三区视频 | 亚洲最新色| 色婷婷av一区二区三区久久 | 久草视频在线资源 | 久久国产精品二国产精品中国洋人 | 91社区电影 | 色妹子久久 | asian附近女人裸体pics | 91网站在线播放 | 在线观看91精品 | 成人18在线 | 久久久久久久一区 | 福利一区二区三区视频在线观看 | 4p一女两男做爰在线观看 | 国产精品jk白丝蜜臀av软件 | 91网站永久免费看 | 黄色网址免费在线 | 综合在线视频 | 亚洲乱搞 | 中文在线观看视频 | 中文字幕在线视频日本 | 亚洲四播房 | 国产一级爱c视频 | 欧美人禽| 男人天堂免费 | 全黄裸片武则天艳史 | 亚洲va久久久噜噜噜久久男同 | 天堂成人国产精品一区 | 日韩一级免费毛片 | 69性欧美高清影院 | 中文字幕亚洲一区二区三区 | 欧美精品电影一区 | 91一区二区在线观看 | 久久精品亚洲一区 | 天天操天天碰 | 欧美亚洲综合在线 | 成人性视频免费网站下载软件 | 国产亚洲精品综合一区91 |