android 邮件开发(javax.mail)

Android JavaMail发送邮件 编程 在发送邮件之前,我们需要设置发送方和接收方的相关信息,包括SMTP服务器地址、端口号、发送方邮箱、发送方邮箱密码以及接收方邮箱。以上就是使用JavaMail库在Android应用中发送邮件的步骤。通过设置邮件相关信息、创建邮件内容以及建立与SMTP服务器的连接,我们可以轻松地实现邮件的发送功能。本文将介绍如何使用JavaMail库在Android应用中实现发送邮件的功能。请注意,在使用JavaMail库发送邮件时,需要确保你的Android设备连接到互联网,并且授予应用程序访问互联网的权限。 阅读详情

http://llshenglin.iteye.com/blog/1030505

 

android 邮件开发(javax.mail)

文章分类:Java编程

    以前在csdn上发贴求助android邮件开发的开发,后来问题自己解决了。有很多网友遇到了同样的问题,发邮件问我都没及时回复。在这里我把封存装的email源代码贴出来,和大家分享。
    android开发邮件需要添加三个扩展包:mail.jar,additional.jar,和activation.jar。直接用java开发,则只需前面两个包。两种不同的开发方式,包的版本是不同的。
    封装了一个SMailSender 类,类是Runnable的实现,也就是邮件功能可作为一个线程在后台运行。SMailSender类目前只支持gmail、126和163三种邮箱,如果要支持其他邮箱,可根据邮箱的协议类型进行相应的扩展。

SMailSender.java
Java代码 复制代码  收藏代码
  1. package com.jia.test;   
  2.   
  3. import java.util.Properties;   
  4.   
  5. import javax.activation.DataHandler;   
  6. import javax.activation.FileDataSource;   
  7. import javax.mail.BodyPart;   
  8. import javax.mail.Message;   
  9. import javax.mail.Multipart;   
  10. import javax.mail.Session;   
  11. import javax.mail.Transport;   
  12. import javax.mail.internet.InternetAddress;   
  13. import javax.mail.internet.MimeBodyPart;   
  14. import javax.mail.internet.MimeMessage;   
  15. import javax.mail.internet.MimeMultipart;   
  16.   
  17. import android.util.Log;   
  18.   
  19. public class SMailSender implements Runnable {   
  20.     private final String Tag = "SMailSender";   
  21.        
  22.     private String mSmtp_host;   
  23.     private String mFrom_userName;             
  24.     private String mFrom_passWord;                           
  25.     private String mShow_name = "Jiahe";   
  26.        
  27.     private MimeMessage mMimeMsg;   // 要发送的email信息   
  28.     private Session mSession;   
  29.     private Multipart mp;           // 存放邮件的title 内容和附件   
  30.     private String mSubject;   
  31.     private String mContent;   
  32.     private String mToId = null;   
  33.     private String mCcId = null;   
  34.     private String mBccId = null;   
  35.     private String mFilePath = null;   
  36.       
  37.     private final int NONE = 0;   
  38.     private final int CONNECTING = 1;   
  39.     private final int CONNECTED = 2;   
  40.     private final int SENDING = 3;   
  41.     private final int SENDED = 4;   
  42.     private int mState;   
  43.        
  44.     public enum MailType {   
  45.         TYPE_GMAIL, TYPE_126, TYPE_163, TYPE_QQ;   
  46.     }   
  47.   
  48.     private MailType mailType;   
  49.     //private Properties props;   
  50.        
  51.     /**  
  52.      * 构造函数  
  53.      * @param hostName  
  54.      */  
  55.     public SMailSender(){   
  56. //      mSmtp_host = "smtp.gmail.com";   
  57.         mp = new MimeMultipart();   
  58.     }   
  59.        
  60.     public SMailSender(String hostName){   
  61. //      mSmtp_host = hostName;   
  62.         mp = new MimeMultipart();   
  63.     }   
  64.        
  65.     /**  
  66.      * 设置发件人的用户名和密码  
  67.      * 目前只支持gmail、126、163邮箱  
  68.      * @param _userName  
  69.      * @param _password  
  70.      */  
  71.     public boolean setAuthor(String _userName, String _password){   
  72.         mFrom_userName = _userName;   
  73.         mFrom_passWord = _password;   
  74.         return setHost(mFrom_userName);     //设置邮箱类型   
  75.     }   
  76.        
  77.     /**  
  78.      * 设置邮件主题  
  79.      * @param subject  
  80.      */  
  81.     public void setSubject(String subject){   
  82.         if(subject!= null)   
  83.             mSubject = subject;   
  84.     }   
  85.        
  86.     /**  
  87.      * 设置邮件内容  
  88.      * @param content  
  89.      */  
  90.     public void setContent(String content){   
  91.         if(content != null)   
  92.             mContent = content;   
  93.     }   
  94.        
  95.     /**  
  96.      * 设置收件人,收件人之间用";"隔开  
  97.      * @param to  
  98.      * @return  
  99.      */  
  100.     public void setTo(String toId){   
  101.         mToId = toId;   
  102.     }   
  103.        
  104.     /**  
  105.      * 设置邮件抄送人,抄送人之间用";"隔开  
  106.      * @param copyto  
  107.      * @return  
  108.      */  
  109.     public void setCc(String ccId){   
  110.         mCcId = ccId;   
  111.     }   
  112.        
  113.     /**  
  114.      * 设置暗抄送人,暗抄送人之间用";"隔开  
  115.      * @param bcopyto  
  116.      * @return  
  117.      */  
  118.     public void setBcc(String bccId){   
  119.         mBccId = bccId;   
  120.     }   
  121.        
  122.     public void setShowName(String name){   
  123.         mShow_name = name;   
  124.     }   
  125.        
  126.     /**  
  127.      * 设置附件路径,路径之间用";"隔开  
  128.      * @param path  
  129.      */  
  130.     public void addFileAffix(String path){   
  131.         mFilePath = path;   
  132.     }   
  133.        
  134.     public int getMailState(){   
  135.         return mState;   
  136.     }   
  137.        
  138.     @Override  
  139.     public void run() {   
  140.         executeMailandSend();   
  141.     }   
  142.        
  143.        
  144.        
  145.     private boolean setSendToMsg(String to) {   
  146.         if (to.equals("") || to == null) {   
  147.             return false;   
  148.         }   
  149.         try {   
  150.             String sendto[];   
  151.             sendto = to.split(";");   
  152.             for (int i = 0; i < sendto.length; i++) {   
  153.                 mMimeMsg.addRecipients(Message.RecipientType.TO,   
  154.                         InternetAddress.parse(sendto[i]));   
  155.             }   
  156.             return true;   
  157.         } catch (Exception e) {   
  158.             return false;   
  159.         }   
  160.     }   
  161.   
  162.     private boolean setCopyToMsg(String copyto) {   
  163.         if (copyto.equals("") || copyto == null) {   
  164.             return false;   
  165.         }   
  166.         try {   
  167.             String copy[];   
  168.             copy = copyto.split(";");   
  169.             for (int i = 0; i < copy.length; i++) {   
  170.                 mMimeMsg.addRecipients(Message.RecipientType.CC,   
  171.                         InternetAddress.parse(copy[i]));   
  172.             }   
  173.             return true;   
  174.         } catch (Exception e) {   
  175.             return false;   
  176.         }   
  177.     }   
  178.        
  179.     private boolean setBCopyToMsg(String bcopyto){   
  180.         if (bcopyto.equals("") || bcopyto == null) {   
  181.             return false;   
  182.         }   
  183.         try {   
  184.             String bcopy[];   
  185.             bcopy = bcopyto.split(";");   
  186.             for (int i = 0; i < bcopy.length; i++) {   
  187.                 mMimeMsg.addRecipients(Message.RecipientType.BCC,   
  188.                         InternetAddress.parse(bcopy[i]));   
  189.             }   
  190.             return true;   
  191.         } catch (Exception e) {   
  192.             return true;   
  193.         }   
  194.     }   
  195.        
  196.     private boolean setContentMp(String conMp){   
  197.         try {   
  198.             BodyPart bp = new MimeBodyPart();   
  199.             bp.setContent(   
  200.                     "<meta http-equiv=Context-Type context=text/html;charset=gb2312>"  
  201.                             + conMp, "text/html;charset=GB2312");   
  202.             mp.addBodyPart(bp);   
  203.             return true;   
  204.         } catch (Exception e) {   
  205.             System.out.println("Set context Faild! " + e);   
  206.             return false;   
  207.         }   
  208.     }   
  209.        
  210.     private boolean addFile(String filePath){   
  211. //      System.out.println("add affix..");   
  212.         if (filePath.equals("") || filePath == null) {   
  213.             return false;   
  214.         }   
  215.         String file[];   
  216.         file = filePath.split(";");   
  217. //      System.out.println("you have " + file.length + " affix!");   
  218.         try {   
  219.             for (int i = 0; i < file.length; i++) {   
  220.                 BodyPart bp = new MimeBodyPart();   
  221.                 FileDataSource fileds = new FileDataSource(file[i]);   
  222.                 bp.setDataHandler(new DataHandler(fileds));   
  223.                 bp.setFileName(fileds.getName());   
  224.                 mp.addBodyPart(bp);   
  225.             }   
  226.             return true;   
  227.         } catch (Exception e) {   
  228.             Log.d(Tag, "add affix: " + filePath + "--faild!" + e);   
  229.             System.err.println("add affix: " + filePath + "--faild!" + e);   
  230.             return false;   
  231.         }   
  232.     }   
  233.        
  234.     private boolean setHost(String mailAddress){   
  235.         if(mailAddress.contains("@gmail.")){   
  236.             mSmtp_host = "smtp.gmail.com";   
  237.             mailType = MailType.TYPE_GMAIL;   
  238.             return true;   
  239.         }   
  240.         if(mailAddress.contains("@126.")){   
  241.             mSmtp_host = "smtp.126.com";   
  242.             mailType = MailType.TYPE_126;   
  243.             return true;   
  244.         }   
  245.         if(mailAddress.contains("@163.")){   
  246.             mSmtp_host = "smtp.163.com";   
  247.             mailType = MailType.TYPE_163;   
  248.             return true;   
  249.         }   
  250.         else  
  251.             return false;   
  252. /*      if(mailAddress.contains("@qq.")){  
  253.             mSmtp_host = "smtp.qq.com";  
  254.             mailType = MailType.TYPE_QQ;  
  255.         }*/  
  256.     }   
  257.        
  258.     private void executeMailandSend() {   
  259.   
  260.         try {   
  261.             mState = NONE;   
  262.             Properties props = System.getProperties();   
  263.             props = System.getProperties();   
  264.             if(mailType == MailType.TYPE_GMAIL){    //如果为gmail邮箱,需要设置下两项   
  265.                 props.put("mail.smtp.starttls.enable", "true");   
  266.                 props.put("mail.smtp.port", "587"); // gmail smtp port 587 / 465   
  267.             }   
  268.                
  269.             props.put("mail.smtp.host", mSmtp_host);   
  270.             props.put("mail.smtp.user", mFrom_userName);   
  271.             props.put("mail.smtp.password", mFrom_passWord);   
  272.             props.put("mail.smtp.auth", "true");   
  273.   
  274.             mSession = Session.getDefaultInstance(props, null);   
  275.             mSession.setDebug(false);   
  276.   
  277.             mMimeMsg = new MimeMessage(mSession);   
  278.             mMimeMsg.setFrom(new InternetAddress(mFrom_userName));   
  279.                
  280.             //mMimeMsg.setContent(mContent, "text/html;charset=utf-8");        
  281.   
  282.             if(mToId != null)   
  283.                 setSendToMsg(mToId);   
  284.             if(mCcId != null)   
  285.                 setCopyToMsg(mCcId);   
  286.             if(mBccId != null)   
  287.                 setBCopyToMsg(mBccId);   
  288.                
  289.   
  290.             if(mSubject != null){   
  291.                 mMimeMsg.setSubject(mSubject);   
  292.             }   
  293.             if(mShow_name != null){   
  294.                 mMimeMsg.setFrom(new InternetAddress(mShow_name + "<"  
  295.                         + mFrom_userName + ">"));   
  296.             }   
  297.             if(mContent != null){   
  298.                 setContentMp(mContent);   
  299.                 mMimeMsg.setContent(mp);   
  300.             }   
  301.             if(mFilePath != null){   
  302.                 addFile(mFilePath);   
  303.             }   
  304.                
  305.                
  306.                
  307.             System.out.println(mMimeMsg.getAllRecipients().toString());   
  308.             Transport transport = mSession.getTransport("smtp");   
  309.             System.out.println("connecting...");   
  310.             mState = CONNECTING;   
  311.             transport.connect(mSmtp_host, mFrom_userName, mFrom_passWord);   
  312.             mState = CONNECTED;   
  313.             Log.i(Tag, "Connected to " + mFrom_userName + " succuss");   
  314.             System.out.println("sending...");   
  315.             mState = SENDING;   
  316.             transport.sendMessage(mMimeMsg, mMimeMsg.getAllRecipients());   
  317.             mState = SENDED;   
  318.             transport.close();   
  319.             Log.i(Tag, "Send a mail to " + mToId);   
  320.             System.out.println("send an email to " + mToId + " success");   
  321.         }   
  322.         catch (Exception e) {   
  323.             System.out.println("failure! ");   
  324.             Log.d(Tag, " failure! ", e);   
  325.             e.printStackTrace();       
  326.         }   
  327.   
  328.     }   
  329.   
  330. }  
package com.jia.test;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
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 android.util.Log;

public class SMailSender implements Runnable {
	private final String Tag = "SMailSender";
	
    private String mSmtp_host;
    private String mFrom_userName;          
    private String mFrom_passWord;                        
    private String mShow_name = "Jiahe";
    
    private MimeMessage mMimeMsg; 	// 要发送的email信息
	private Session mSession;
    private Multipart mp; 			// 存放邮件的title 内容和附件
    private String mSubject;
    private String mContent;
    private String mToId = null;
    private String mCcId = null;
    private String mBccId = null;
    private String mFilePath = null;
   
    private final int NONE = 0;
    private final int CONNECTING = 1;
    private final int CONNECTED = 2;
    private final int SENDING = 3;
    private final int SENDED = 4;
    private int mState;
    
	public enum MailType {
		TYPE_GMAIL, TYPE_126, TYPE_163, TYPE_QQ;
	}

	private MailType mailType;
    //private Properties props;
    
    /**
     * 构造函数
     * @param hostName
     */
    public SMailSender(){
//    	mSmtp_host = "smtp.gmail.com";
    	mp = new MimeMultipart();
    }
    
    public SMailSender(String hostName){
//    	mSmtp_host = hostName;
    	mp = new MimeMultipart();
    }
    
    /**
     * 设置发件人的用户名和密码
     * 目前只支持gmail、126、163邮箱
     * @param _userName
     * @param _password
     */
    public boolean setAuthor(String _userName, String _password){
    	mFrom_userName = _userName;
    	mFrom_passWord = _password;
    	return setHost(mFrom_userName);		//设置邮箱类型
    }
    
    /**
     * 设置邮件主题
     * @param subject
     */
    public void setSubject(String subject){
    	if(subject!= null)
    		mSubject = subject;
    }
    
    /**
     * 设置邮件内容
     * @param content
     */
    public void setContent(String content){
    	if(content != null)
    		mContent = content;
    }
    
    /**
     * 设置收件人,收件人之间用";"隔开
     * @param to
     * @return
     */
    public void setTo(String toId){
    	mToId = toId;
    }
    
    /**
     * 设置邮件抄送人,抄送人之间用";"隔开
     * @param copyto
     * @return
     */
    public void setCc(String ccId){
    	mCcId = ccId;
    }
    
	/**
	 * 设置暗抄送人,暗抄送人之间用";"隔开
	 * @param bcopyto
	 * @return
	 */
    public void setBcc(String bccId){
    	mBccId = bccId;
    }
    
    public void setShowName(String name){
    	mShow_name = name;
    }
    
    /**
     * 设置附件路径,路径之间用";"隔开
     * @param path
     */
    public void addFileAffix(String path){
    	mFilePath = path;
    }
    
    public int getMailState(){
    	return mState;
    }
    
	@Override
	public void run() {
		executeMailandSend();
	}
	
	
	
    private boolean setSendToMsg(String to) {
		if (to.equals("") || to == null) {
			return false;
		}
		try {
			String sendto[];
			sendto = to.split(";");
			for (int i = 0; i < sendto.length; i++) {
				mMimeMsg.addRecipients(Message.RecipientType.TO,
						InternetAddress.parse(sendto[i]));
			}
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	private boolean setCopyToMsg(String copyto) {
		if (copyto.equals("") || copyto == null) {
			return false;
		}
		try {
			String copy[];
			copy = copyto.split(";");
			for (int i = 0; i < copy.length; i++) {
				mMimeMsg.addRecipients(Message.RecipientType.CC,
						InternetAddress.parse(copy[i]));
			}
			return true;
		} catch (Exception e) {
			return false;
		}
	}
	
	private boolean setBCopyToMsg(String bcopyto){
		if (bcopyto.equals("") || bcopyto == null) {
			return false;
		}
		try {
			String bcopy[];
			bcopy = bcopyto.split(";");
			for (int i = 0; i < bcopy.length; i++) {
				mMimeMsg.addRecipients(Message.RecipientType.BCC,
						InternetAddress.parse(bcopy[i]));
			}
			return true;
		} catch (Exception e) {
			return true;
		}
	}
	
	private boolean setContentMp(String conMp){
		try {
			BodyPart bp = new MimeBodyPart();
			bp.setContent(
					"<meta http-equiv=Context-Type context=text/html;charset=gb2312>"
							+ conMp, "text/html;charset=GB2312");
			mp.addBodyPart(bp);
			return true;
		} catch (Exception e) {
			System.out.println("Set context Faild! " + e);
			return false;
		}
	}
	
	private boolean addFile(String filePath){
//		System.out.println("add affix..");
		if (filePath.equals("") || filePath == null) {
			return false;
		}
		String file[];
		file = filePath.split(";");
//		System.out.println("you have " + file.length + " affix!");
		try {
			for (int i = 0; i < file.length; i++) {
				BodyPart bp = new MimeBodyPart();
				FileDataSource fileds = new FileDataSource(file[i]);
				bp.setDataHandler(new DataHandler(fileds));
				bp.setFileName(fileds.getName());
				mp.addBodyPart(bp);
			}
			return true;
		} catch (Exception e) {
			Log.d(Tag, "add affix: " + filePath + "--faild!" + e);
			System.err.println("add affix: " + filePath + "--faild!" + e);
			return false;
		}
	}
	
	private boolean setHost(String mailAddress){
		if(mailAddress.contains("@gmail.")){
			mSmtp_host = "smtp.gmail.com";
			mailType = MailType.TYPE_GMAIL;
			return true;
		}
		if(mailAddress.contains("@126.")){
			mSmtp_host = "smtp.126.com";
			mailType = MailType.TYPE_126;
			return true;
		}
		if(mailAddress.contains("@163.")){
			mSmtp_host = "smtp.163.com";
			mailType = MailType.TYPE_163;
			return true;
		}
		else
			return false;
/*		if(mailAddress.contains("@qq.")){
			mSmtp_host = "smtp.qq.com";
			mailType = MailType.TYPE_QQ;
		}*/
	}
	
	private void executeMailandSend() {

		try {
			mState = NONE;
			Properties props = System.getProperties();
			props = System.getProperties();
			if(mailType == MailType.TYPE_GMAIL){	//如果为gmail邮箱,需要设置下两项
				props.put("mail.smtp.starttls.enable", "true");
				props.put("mail.smtp.port", "587"); // gmail smtp port 587 / 465
			}
			
			props.put("mail.smtp.host", mSmtp_host);
			props.put("mail.smtp.user", mFrom_userName);
			props.put("mail.smtp.password", mFrom_passWord);
			props.put("mail.smtp.auth", "true");

			mSession = Session.getDefaultInstance(props, null);
			mSession.setDebug(false);

			mMimeMsg = new MimeMessage(mSession);
			mMimeMsg.setFrom(new InternetAddress(mFrom_userName));
			
			//mMimeMsg.setContent(mContent, "text/html;charset=utf-8");		

			if(mToId != null)
				setSendToMsg(mToId);
			if(mCcId != null)
				setCopyToMsg(mCcId);
			if(mBccId != null)
				setBCopyToMsg(mBccId);
			

			if(mSubject != null){
				mMimeMsg.setSubject(mSubject);
			}
			if(mShow_name != null){
				mMimeMsg.setFrom(new InternetAddress(mShow_name + "<"
						+ mFrom_userName + ">"));
			}
			if(mContent != null){
				setContentMp(mContent);
				mMimeMsg.setContent(mp);
			}
			if(mFilePath != null){
				addFile(mFilePath);
			}
			
			
			
			System.out.println(mMimeMsg.getAllRecipients().toString());
			Transport transport = mSession.getTransport("smtp");
			System.out.println("connecting...");
			mState = CONNECTING;
			transport.connect(mSmtp_host, mFrom_userName, mFrom_passWord);
			mState = CONNECTED;
			Log.i(Tag, "Connected to " + mFrom_userName + " succuss");
			System.out.println("sending...");
			mState = SENDING;
			transport.sendMessage(mMimeMsg, mMimeMsg.getAllRecipients());
			mState = SENDED;
			transport.close();
			Log.i(Tag, "Send a mail to " + mToId);
			System.out.println("send an email to " + mToId + " success");
		}
		catch (Exception e) {
			System.out.println("failure! ");
			Log.d(Tag, " failure! ", e);
			e.printStackTrace();	
		}

	}

}


    上面的类调用比较简单,再给一个使用的实例MailBackground.java:
Java代码 复制代码  收藏代码
  1. package com.jia.test;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.view.View;   
  6. import android.view.View.OnClickListener;   
  7. import android.widget.Button;   
  8. import android.widget.EditText;   
  9. import android.widget.TextView;   
  10. import android.widget.Toast;   
  11.   
  12. public class MailBackground extends Activity{   
  13.   
  14.     private EditText mEditText_1;   
  15.     private EditText mEditText_2;   
  16.     private EditText mEditText_3;   
  17.     private EditText mEditText_4;   
  18. //  private EditText mEditText_5;   
  19.     private Button mButton;   
  20.        
  21.     private TextView mTextView;   
  22.        
  23.     SMailSender mail;   
  24.        
  25.     private int mPreState;   
  26.     private int mRealState;   
  27.     private Thread thread_mail;   
  28.        
  29.     @Override  
  30.     public void onBackPressed() {   
  31.         super.onBackPressed();   
  32.         finish();   
  33.     }   
  34.   
  35.     @Override  
  36.     protected void onCreate(Bundle savedInstanceState) {   
  37.         super.onCreate(savedInstanceState);   
  38.         setContentView(R.layout.mail_layout);   
  39.            
  40.         mEditText_1 = (EditText)findViewById(R.id.email_num_to);   
  41.         mEditText_1.setText("sanditest01@126.com");   
  42.         mEditText_2 = (EditText)findViewById(R.id.email_num_cc);   
  43.         mEditText_2.setText("sanditest02@163.com");   
  44.         mEditText_3 = (EditText)findViewById(R.id.email_subject);   
  45.         mEditText_3.setText("hello, this is a test email");   
  46.         mEditText_4 = (EditText)findViewById(R.id.email_text);   
  47.         //mEditText_4.setText("您好:/n  this is a test email, you don't need to reply to, thanks for your help!");   
  48.         mEditText_4.setText("this is a test email, you don't need");   
  49. //      mEditText_5 = (EditText)findViewById(R.id.email_file);   
  50. //      mEditText_5.setText("");   
  51.            
  52.         mTextView = (TextView)findViewById(R.id.email_file_view);   
  53.            
  54.            
  55.         mButton = (Button)findViewById(R.id.button_sendEmail);   
  56.         mButton.setOnClickListener(new OnClickListener(){   
  57.             @Override  
  58.             public void onClick(View v) {   
  59.                 System.out.println("send clicked");   
  60.                 String to = mEditText_1.getText().toString();   
  61.                 String cc = mEditText_2.getText().toString();   
  62.                 String subject = mEditText_3.getText().toString();   
  63.                 String content = mEditText_4.getText().toString();   
  64. //              String filePath = mEditText_5.getText().toString();   
  65.                    
  66.                 mail = new SMailSender();   
  67.                    
  68. //              mail.setAuthor("sanditest01@126.com", "sanditest");   
  69.                 mail.setAuthor("sanditest01@gmail.com", "sanditest");   
  70.                    
  71. //              mail.setAuthor("sanditest02@163.com", "sanditest");   
  72.                 mail.setShowName("Sandi");   
  73.                 mail.setTo(to); //密码:sanditest   
  74.                 mail.setCc(cc);   
  75.                 mail.setSubject(subject);   
  76.                 mail.setContent(content);   
  77.   
  78.                 mRealState = mPreState = 0;   
  79.                 thread_mail = new Thread(mail);   
  80.                 new Thread(r);   
  81.                 thread_mail.start();            //启动发送线程   
  82.                 //thread_state.start();         //启动状态监视线程   
  83.                 Monitor();   
  84.             }   
  85.         });   
  86.   
  87.     }   
  88.        
  89.     Runnable r = new Runnable(){   
  90.        
  91.             public void run() {   
  92.                 while(true){   
  93.                     try {   
  94.                         Thread.sleep(100);   
  95.                         mRealState = mail.getMailState();   
  96.                         System.out.println("mRealState = " + mRealState);   
  97.                         if(mRealState == mPreState)   
  98.                             continue;   
  99.                         if(1 == mRealState){   
  100.                             mPreState = mRealState;   
  101.                             System.out.println("Toast mRealState2 = " + mRealState);   
  102.                         }   
  103.                         if(2 == mRealState){   
  104.                             mPreState = mRealState;   
  105.                         }   
  106.                         if(3 == mRealState){   
  107.                             mPreState = mRealState;   
  108.                         }   
  109.                         if(4 == mRealState){        //邮件发送成功,线程退出   
  110.                             mPreState = mRealState;   
  111.                             break;   
  112.                         }   
  113.                     } catch (InterruptedException e) {   
  114.                         // TODO Auto-generated catch block   
  115.                         e.printStackTrace();   
  116.                     }   
  117.                 }   
  118.             }   
  119.         };   
  120.            
  121.     protected void Monitor() {   
  122.         while (true) {   
  123.             try {   
  124.                 Thread.sleep(10);   
  125.                 mRealState = mail.getMailState();   
  126.                 //System.out.println("mRealState = " + mRealState);   
  127.                 if (mRealState == mPreState)   
  128.                     continue;   
  129.                 if (1 == mRealState) {   
  130.                     mPreState = mRealState;   
  131.                     mTextView.setText("Connecting...");   
  132.                     System.out.println("Toast mRealState1 = " + mRealState);   
  133.                     // setTitle("Connecting...");   
  134.                     Toast.makeText(MailBackground.this, "Connecting",   
  135.                             Toast.LENGTH_SHORT).show();   
  136.                     System.out.println("Toast mRealState2 = " + mRealState);   
  137.                 }   
  138.                 if (2 == mRealState) {   
  139.                     mPreState = mRealState;   
  140.                     mTextView.setText("Connecting success");   
  141.                     // setTitle("Connected success");   
  142.                     Toast.makeText(getApplicationContext(), "Connecting",   
  143.                             Toast.LENGTH_SHORT).show();   
  144.                 }   
  145.                 if (3 == mRealState) {   
  146.                     mPreState = mRealState;   
  147.                     mTextView.setText("Sending");   
  148.                     Toast.makeText(getApplicationContext(), "Sending",   
  149.                             Toast.LENGTH_SHORT).show();   
  150.                 }   
  151.                 if (4 == mRealState) { // 邮件发送成功,线程退出   
  152.                     mPreState = mRealState;   
  153.                     mTextView.setText("Send email success");   
  154.                     Toast.makeText(getApplicationContext(), "Send success!",   
  155.                             Toast.LENGTH_SHORT).show();   
  156.                     break;   
  157.                 }   
  158.             } catch (InterruptedException e) {   
  159.                 // TODO Auto-generated catch block   
  160.                 e.printStackTrace();   
  161.             }   
  162.         }   
  163.     }   
  164.   
  165. }  
基于android平台的手机邮箱开发(源码+文档) 基于android平台的手机邮箱开发,本次的课程设计选题为电子邮箱,邮箱的意义很简单,传递信息。但这与传统的实体邮箱有着很大的不同,源码和文档都包含。 立即下载

相关推荐

android邮箱开发实例源码

《android应用开发深入学习实录》中邮箱开发的源码

android使用JavaMail开发邮箱APP

JavaMail是大名鼎鼎的Oracle公司开发的电子邮件开发框架,如果使用JAVA语言开发邮箱应用基本都绕不开它。在Android端开发邮箱APP的过程中,我遇到了不少问题并一一解决,这里列举了一些做为备忘录,后续开发差不多了我会把源码全部放在github上,以便一起学习讨论。 1、邮箱服务器连接失败 2、获取邮件内容乱码 3、附件名称乱码 4、附件下载速度慢 5、邮件正文包含图片时,对图片的处理(重点难点) 6、对正文图片和附件的拆分(难点)(可根据Content-ID参数判断) 7、对邮

qugengting的博客 9286

android邮件开发

android邮件开发 包括新浪 网易 雅虎 腾讯等主流邮件的收和发功能

Android 开发 使用javax.mail发送邮件。

Android 开发 使用javax.mail发送邮件。 简介 sun公司开源的邮件发送工具。 依赖 implementation 'com.sun.mail:android-mail:1.6.0' implementation 'c...

weixin_30912051的博客 909

安卓通用邮件客户端项目源码

安卓通用邮件客户端项目源码,自动截取邮箱域名使用smtp方式登录邮箱,所以要求测试邮箱已经开通了smtp登录授权,详细的开通方法可以google 邮箱+smtp 例如:QQ邮箱 smtp就可以找到开通smtp的方法了。本文不做介绍。项目有超详细的中文注释。UI是扒的QQ邮箱客户端的皮。想学习这一部分内容的同学可以借鉴一下。另外在avd上测试一直不能登录需要4.0以上的真机测试。可以操作邮件联系人和发邮件。本源码是一个不错的邮箱源码

从S参数矩阵到硬件实现:手把手教你用耦合微带线设计Marchand巴伦

本文详细介绍了使用耦合微带线设计Marchand巴伦的完整流程。从奇偶模理论和S参数矩阵分析入手,结合ADS仿真软件进行参数优化与电磁仿真验证,最终指导PCB布局、制作与实测调试。文章以2.4GHz Wi-Fi前端电路为例,手把手演示了从理论计算到硬件实现的全过程,并分享了关键的工程经验与调试技巧。

weixin_29271263的博客 535

邮件系统的开发

邮件系统的开发 1) N (Need 需求) 随着科学技术的发展,计算机进入了生活,娱乐和办公。在计算机系统中,使用邮件系统收发邮件使工作中必不可少的组成部分,如今社会竞争十分激烈,工作效率显得越发重要。试用手机或者是便捷设备在旅行、出差或者是路上处理工作事务和朋友间的联系越来越流行。因此,人们的生活越来越离不开手机的陪伴。随着手机硬件和软件系统的发展,人们对移动电子设备的硬件性能和软件性能要...

weixin_30496751的博客 433

STM32 移植LwIP 实现网线插拔自动恢复

STM32 移植LwIP 之后,能正常联网通讯,但是发现2个问题, 1、上电初始化前,未插入网线,之后就无法获取到IP地址(DHCP) 2、正常通讯过程中,拔掉网线,然后插回去,不知道如何复位 先看一下LWIP初始化代码 /** * LwIP initialization function */ int MX_LWIP_Init() { /* Initilialize the LwIP stack with RTOS */ tcpip_init( NULL, NULL );

tiantangmoke的博客 8073

Android调用邮箱发邮件

Android调用邮箱发邮件

爱喝水程序员的博客 1980

案例分析|一篇文章带你看懂养鸡场智慧管理系统

养鸡场智慧管理系统是为了满足现代化养鸡业对精细化管理的需求而设计的一款专业软件。随着科技的发展和农业产业的升级,传统的手工记录和管理方式已无法满足高效、准确和实时的数据跟踪需求。本软件旨在通过集成各种功能模块,帮助养鸡场主实现从鸡苗孵化、饲养管理、饲料控制到销售结算等全链条的智能化操作。该系统的核心目标是提升养鸡场的运营效率和盈利能力,通过自动化数据处理,减少人工误差,节省时间和精力。例如,孵化报表和记录模块可以帮助管理者实时监控孵化过程,及时调整策略;

muyu2980的专栏 930

【测绘程序设计】——潮汐调和分析

最小二乘潮汐调和分析源码、使用示例及数据

C_xxy's blog 2652

android发送邮件

android发送邮件不能使用javax.mail:mail:1.4.7 jar包,会报NoClassDefFound:Ljava/awt/datatransfer/Transferable错误.正确应该使用com.sun.mail:android-mail:1.6.2。 在app的build.gradle->dependencies中添加 implementation 'com.sun.mail:android-mail:1.6.2' ...

hello____world_0109的博客 2770

lammps教程:聚合物压缩,避免“bond atoms missing”

如果使用ms建模,聚合物的链会伸出到盒子外面,在导出data文件后,盒子外面的原子被周期性算法折叠进盒子对面,这就造成了边界附近的bond原子可能被分布到了盒子的两侧。并且,这个data文件不能使用npt系综进行压缩,npt系综必须使用周期性边界,在压缩时,bond原子同样会移动到对面的边界。所以,最好的解决办法是使用一个反射墙墙进行压缩,设置一个反射墙墙既可以实现压缩效果,也可以组织原子跨越box边界移动到对面。解决这个问题的原则只有一个:导出data时确保所有的bond原子没有跨越边界。

lammps_jiayou的博客 3819

JavaMail在Android上使用

下载http://code.google.com/p/javamail-android/  虽然n年没更新了,但还是将就用吧,遇到问题自己解决。             说说纠结了2两天的问题:IMAPInputStream cannot be cast to javax.mail.Multipart,这种问题真是折腾人。             我建一个普通的java项目,导入javamai

liuhongwei123888的专栏 3095

华为OD机考双机位C卷 - 斗地主之顺子 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 斗地主之顺子(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 9692

解读(DivideMix)DIVIDEMIX: LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING

这是Salesforce在今年年初出的一篇关于半监督学习的文章被ICLR 2020收录,目前还保持在SOTA状态。 文章主要做了两点工作: • 提出了一个co-divide方法。 • 利用label co-refinement 和co-guessing 改善之前的谷歌提出的MixMatch方法 1.co-divide方法 大概思路:同时训练两个网络,让每个网络在样本损失分布上去拟合GMM模型,并利用GMM模型,将训练数据分为标签数据和未标签数据,co-divide 使前面分的标签与未标签数据分别在

so 5041

羊皮书APP(Android版)开发系列(十三)Android 邮件发送的实现

在app开发过程中,邮件发送功能也是一个常见的功能,用于反馈一些app信息,严重错误等。这里使用javamail-android来实现,使用javamail-android需要下载三个jar包,分别是:additionnal.jar、mail.jar、activation.jar,下载地址是:https://code.google.com/archive/p/javamail-android/dow

Jason Wang 2310

Python爬虫:如何抓取亚马逊商品评论和评分

通过本文的学习,您已经掌握了如何使用Selenium爬取亚马逊商品的评论数据,并处理反爬虫机制。特别是在亚马逊这样的大型电商平台,商品评论和评分不仅能够反映产品的质量和顾客的体验,还可以对商家进行竞争分析。通过爬取亚马逊的商品评论,您可以获得有价值的市场信息,如产品的优缺点、消费者的反馈等。通过查看源代码,您可以发现,亚马逊的商品评论和评分数据往往通过JavaScript动态加载,这也意味着在抓取时需要使用Selenium或Playwright等工具来模拟浏览器加载。亚马逊的评论页面支持分页加载。

2201_76125261的博客 1437

Android 发送邮件异常:no object DCH for MIME type multipart/mixed

一、问题描述 维护一个Android项目,项目里集成有邮箱功能,gradle添加有: implementation 'com.sun.mail:android-mail:1.5.6' implementation 'com.sun.mail:android-activation:1.5.6' 邮箱的收件和发送功能是以前做好的,以往使用正常,然后某一次打出的android包发送邮件功能异常 ...

xuwei7746521的博客 1910

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android使用mail库发送邮件(后台发送,不调用本地APP)

在Andoird中,实现发送邮件主要有两种方式: 调用其他APP(QQ邮箱、gmail邮箱、自带邮箱等)。 直接使用第三方服务器发送邮件。(就是直接使用QQ邮箱它们的服务器)。 如果使用第一种方式实现的话,需要有其他APP的支持,用户体验极差。

AllBug的博客 3066

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 自动推送,安卓实现自动发送邮件的功能

我们在安卓开发中,可能需要安卓发送邮件的功能。往往,我们必须手动输入账号和密码后发生邮件。这种方式费时费力,因此在这里介绍使用一种方法实现自动发送邮件的功能,我们可以用其收集bug发送邮箱等功能的实现。一 下载jar包Android实现发送邮件,首先需要依赖additional.jar、mail.jar和activation.jar这3个jar包。首先前往百度网盘 密码: 8s5b下载所需要的ja...

weixin_33572836的博客 899

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android使用javax.mail发送crash邮件给自己

首先要手动添加三个jar包 mail、activation、additionnal 需要翻墙下载链接:https://code.google.com/archive/p/javamail-android/downloads 百度云盘链接:https://pan.baidu.com/s/1vheC2JQKBfc35PXCb6OK_g 复制到libs目录下后对jar包点击右键 –&amp;gt; a...

喂_balabala 5778

Android 发送邮件mail

andoid利用javamail发送邮件

打字打不快的屌丝 814
下一篇: Android Debug Bridge(adb) 与 LogCat
androidboy365
博客等级 码龄16年 35粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值