1. 程式人生 > >使用兩種方式,Android 傳送檔案到指定郵箱(帶多個附件)

使用兩種方式,Android 傳送檔案到指定郵箱(帶多個附件)

第一種方法,呼叫系統的郵件軟體來發送

眾所周知在Android中呼叫其他程式進行相關處理,都是使用的Intent。當然,Email也不例外。

 在Android中,呼叫Email有三種類型的Intent:

 Intent.ACTION_SENDTO  無附件的傳送

 Intent.ACTION_SEND  帶附件的傳送

 Intent.ACTION_SEND_MULTIPLE  帶有多附件的發

1、使用SENDTO傳送

 Intent data=new Intent(Intent.ACTION_SENDTO);  
 data.setData(Uri.parse("mailto:[email protected]
")); data.putExtra(Intent.EXTRA_SUBJECT, "這是標題"); data.putExtra(Intent.EXTRA_TEXT, "這是內容"); startActivity(data);

  通過向Intent中putExtra來設定郵件的相關引數。

2、使用SEND傳送

Intent intent = new Intent(Intent.ACTION_SEND);
String[] tos = { "[email protected]" }; 
String[] ccs = { "[email protected]
" }; String[] bccs = {"[email protected]"}; intent.putExtra(Intent.EXTRA_EMAIL, tos); intent.putExtra(Intent.EXTRA_CC, ccs); intent.putExtra(Intent.EXTRA_BCC, bccs); intent.putExtra(Intent.EXTRA_TEXT, "body"); intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/Chrysanthemum.jpg")); intent.setType("image/*"); intent.setType("message/rfc882"); Intent.createChooser(intent, "Choose Email Client"); startActivity(intent);

很簡單,傳送郵件中,有收件者,抄送者,密送者。 也就是分別通過

     Intent.EXTRA_EMAIL,

     Intent.EXTRA_CC,

     Intent.EXTRA_BCC

  來進行putExtra來設定的

而單個附件的傳送,則使用Intent.EXTRA_STREAM來設定附件的地址Uri。

3、使用SEND_MULTIPLE來進行多附件的傳送

		Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
		String[] tos = { "[email protected]" }; 
		String[] ccs = { "[email protected]" }; 
		intent.putExtra(Intent.EXTRA_EMAIL, tos);
		intent.putExtra(Intent.EXTRA_CC, ccs);
		intent.putExtra(Intent.EXTRA_TEXT, "body");
		intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
		
		ArrayList imageUris = new ArrayList();
		imageUris.add(Uri.parse("file:///sdcard/Chrysanthemum.jpg"));
		imageUris.add(Uri.parse("file:///sdcard/Desert.jpg"));		
		intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
		intent.setType("image/*");
		intent.setType("message/rfc882");
		Intent.createChooser(intent, "Choose Email Client");
		startActivity(intent);
當郵件需要帶附件時,型別要這樣設定:intent.setType("application/octet-stream");此時,對於附件檔案的轉換如下
imageUris = new ArrayList<Uri>();
Uri.fromFile(new File(檔案的絕對路徑1)
Uri.fromFile(new File(檔案的絕對路徑2)
Uri.fromFile(new File(檔案的絕對路徑3)
putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris)


第二種方法,通過Java Mail的方式傳送郵件,通過傳送日誌資訊為例來解決

思路,首先判斷網路是否可用,如果可用的話就傳送郵件到指定的郵箱。

/**
	 * 判斷網路是否可用
	 * 
	 * @param activity
	 * @return
	 */
	public boolean isNetworkAvailable(Activity activity) {
		Context context = activity.getApplicationContext();
		// 獲取手機所有連線管理物件(包括對WIFI,net等連線的管理)
		ConnectivityManager connectivityManager = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);

		if (connectivityManager == null) {
			return false;
		} else {
			// 獲取NetworkInfo物件
			NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();

			Log.e("TAG", networkInfo.length + "");
			if (networkInfo != null && networkInfo.length > 0) {
				for (int i = 0; i < networkInfo.length; i++) {
					System.out.println(i + "===狀態==="
							+ networkInfo[i].getState());
					System.out.println(i + "===型別==="
							+ networkInfo[i].getTypeName());
					// 判斷當前網路狀態是否為連線狀態
					if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {// 如果網路連線,再判斷是WIFI連線還是移動資料
						if (networkInfo[i].getTypeName().equals("WIFI")) {// 若是WIFI,則判斷WiFI是否為可用外網
							return checkWifiState();
						} else {// 若是移動資料連線,則判斷是否是4G網路

							return true;
						}
					}
				}
			}
		}
		ToastUtils.showToast(this, "當前沒有可用網路!", Toast.LENGTH_SHORT);
		return false;
	}

第二步,檢查wifi是否為可用wifi
/**
	 * 檢查WIFI是否為可用外網
	 */
	public boolean checkWifiState() {
		WifiConnectTool wifiTool = new WifiConnectTool(this);
		String[] data = wifiTool.getWifiStateAndIP();

		if ("192.254.0.250".equals(data[1])) {
			ToastUtils.showToast(this, "外網連線失敗,請重新選擇可用外網WIFI!", Toast.LENGTH_LONG);
			return false;
		}
		return true;
	}

第三步,如果網路可用,就可以傳送檔案到郵箱了
if (isNetworkAvailable(this)) {
	// 此處是傳送檔案到郵箱的邏輯
	// 傳送檔案的對話方塊
	showDialogSendCSV();
} else {
	return;
}
private void showDialogSendCSV() {

		AlertDialog.Builder adb = new AlertDialog.Builder(this);
		dialog = adb.create();

		View view = getLayoutInflater().inflate(R.layout.setemail_dialog, null);
		
		ImageView iv_arrow = (ImageView) view.findViewById(R.id.iv_arrow);
		ImageView iv_add = (ImageView) view.findViewById(R.id.add_contact);
		
		final EditText email_contact = (EditText) view
				.findViewById(R.id.email_contact);
		/*final EditText email_title = (EditText) view
				.findViewById(R.id.email_title);
		final EditText email_content = (EditText) view
				.findViewById(R.id.email_content);*/

		//下拉框,顯示出儲存的收件人
		iv_arrow.setOnClickListener(new OnClickListener() {
			
			private PopupWindow pop;

			@Override
			public void onClick(View v) {

				if(popWindow == null){
					pop = new PopupWindow(DataManagerActivity.this);
					int with = DensityUtil.dip2px(DataManagerActivity.this, 50);
					pop.setWidth(email_contact.getWidth()+with); // 讓 彈出窗體與輸入框寬度一樣
					int hight = DensityUtil.dip2px(DataManagerActivity.this, 130);
					pop.setHeight(hight);
					
					pop.setContentView(listView1);
					
					pop.setFocusable(true); // 預設 popWindow 不獲得焦點,這樣,listview 條目的無法點選
					
				}
				listView1.setOnItemClickListener(new OnItemClickListener() {

					@Override
					public void onItemClick(AdapterView<?> parent, View view,
							int position, long id) {
						
						// 將對應的文字寫入輸入框
						email_contact.setText(msgList.get(position));
						email_contact.setSelection(msgList.get(position).length());
						
						// 關閉彈出窗體
						pop.dismiss();
					}
				});
				
				// 切換popWidnows的顯示
				if(pop.isShowing()){
					pop.dismiss();
				}else{
					pop.showAsDropDown(email_contact, 0, 0); // 彈出窗體顯示在 輸入框的下方
				}
			}
		});
		//新增收件人到下拉框
		iv_add.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String msg = email_contact.getText().toString().trim();
				if(!TextUtils.isEmpty(msg)){
					if(!dataProvider.isExist(msg)){
						//新增到集合
						dataProvider.addContact(msg);
						msgList.add(msg);
						adapter2.notifyDataSetChanged();
					}
				}
			}
		});
		
		Button btnOk = (Button) view.findViewById(R.id.btn_ok);
		Button btnCancel = (Button) view.findViewById(R.id.btn_cancel);

		btnOk.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				String contact = email_contact.getText().toString().trim();
				/*String title = email_title.getText().toString().trim();
				String content = email_content.getText().toString().trim();*/
				// 檢查郵箱格式是否正確
				if (contact
						.matches("\\b^['_a-z0-9-\\+]"
								+ "+(\\.['_a-z0-9-\\+]+)*@[a-z0-9-]+"
								+ "(\\.[a-z0-9-]+)*\\.([a-z]{2}|aero|arpa|asia"
								+ "|biz|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|"
								+ "name|nato|net|org|pro|tel|travel|xxx)$\\b")) {
				} else {
					ToastUtils.showToast(DataManagerActivity.this, "郵箱格式不正確", Toast.LENGTH_SHORT);
					return;
				}
				/*if (TextUtils.isEmpty(title)) {
					ToastUtils.showToast(DataManagerActivity.this, "標題不能為空", Toast.LENGTH_SHORT);
					return;
				}
				emailTitle = title;
				emailContent = content;*/
				emailReciver = new String[] { contact };
				// 傳送檔案到郵箱(呼叫系統的軟體)
				//sendCSVFileIntent();
				// 傳送檔案到郵箱(使用JavaMail)
				new Thread(){
					public void run() {
						
						sendCSVFilByJavaMail();
					};
				}.start();
				dialog.dismiss();
			}
		});
		btnCancel.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				dialog.dismiss();

			}
		});
		dialog.setCancelable(false);
		dialog.setView(view, 0, 0, 0, 0); // 設定 view

		dialog.show();
	}

	//通過JavaMail傳送檔案
	private void sendCSVFilByJavaMail() {
		sb.setLength(0);
		//先設定郵件
		MailSendInfo info = new MailSendInfo();
    	info.setMailServerHost("smtp.163.com");
    	info.setMailServerPost("25");
    	info.setValidate(true);
    	info.setUserName("[email protected]");
    	info.setPassWord("333333");//郵箱密碼
    	info.setFromAddress("@163.com");
    	//以下三個內容是需要修改的
    	info.setToAddress(emailReciver[0]);
    	if(selectSendItem.size()>1){
    		
    		info.setSubject(selectSendItem.get(0)+"...");
    	}else{
    		info.setSubject(selectSendItem.get(0));
    	}
    	sb.append("收到的檔案:");
    	for (int i = 0; i < selectSendItem.size(); i++) {
    		sb.append(selectSendItem.get(i));
    		if(i < (selectSendItem.size()-1)){
    			sb.append(", ");
    		}
		}
    	Log.e("郵件內容:", sb.toString());
    	info.setContent(sb.toString());
    	
    	MultiMailSend senMail = new MultiMailSend(path);//這個類用來發送郵件
    	
    	senMail.sendAttachment(info,selectSendItem);
		
	}


import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import com.zrd.111.model.MailSendInfo;

import android.os.Environment;
import android.util.Log;

/**
 * 以下是利用JavaMail的API來建立和傳送郵件
 * 多附件傳送郵件類,並且傳送郵件給多個接受者、抄送檔案
 * @author Administrator
 *
 */
public class MultiMailSend {

	private MailSendInfo info;
	private String path;
	public MultiMailSend(String path){
		this.path = path;
	}
	/**
	 * 以文字格式傳送郵件
	 * @param info 待發送的郵件資訊
	 * @return
	 */
	public void sendTextMail(MailSendInfo info){
		this.info = info;
		//判斷是否需要身份驗證
		Properties properties = info.getProperties();
		//1、根據郵件會話屬性和密碼驗證器構造一個傳送郵件的session
		Session sendMailSession  = Session.getDefaultInstance(properties);
		//開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
		sendMailSession.setDebug(true);
		try {
			
			//2、通過session得到transport物件,以便連線郵箱併發送  
            Transport transport = sendMailSession.getTransport();  
            //3、使用郵箱的使用者名稱和密碼連上郵件伺服器,傳送郵件時,發件人需要提交郵箱的使用者名稱和密碼給SMTP伺服器,使用者名稱和密碼都通過驗證之後才能夠正常傳送郵件給收件人。
			transport.connect("smtp.163.com", ".com", "11"); 
			//4、建立郵件訊息
			Message mailMessage = createSimpleMail(sendMailSession);
			//5、傳送郵件訊息
			transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	/**
	 * 傳送內容帶有圖片的郵件
	 */
	public void sendImageEmail(MailSendInfo info){
		this.info = info;
		Properties properties = info.getProperties();
		//1、根據郵件會話屬性和密碼驗證器構造一個傳送郵件的session
		Session sendMailSession  = Session.getDefaultInstance(properties);
		//開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
		sendMailSession.setDebug(true);
		try {
			
			//2、通過session得到transport物件,以便連線郵箱併發送  
            Transport transport = sendMailSession.getTransport();  
            //3、使用郵箱的使用者名稱和密碼連上郵件伺服器,傳送郵件時,發件人需要提交郵箱的使用者名稱和密碼給SMTP伺服器,使用者名稱和密碼都通過驗證之後才能夠正常傳送郵件給收件人。
			transport.connect("smtp.163.com", "1112222222.com", "3333333"); 
			//4、建立郵件訊息
			Message mailMessage = createImageMail(sendMailSession);
			//5、傳送郵件訊息
			transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	/**
	 * 傳送帶有附件的郵件
	 * @param info
	 */
	public void sendAttachment(MailSendInfo info,ArrayList<String> list){
		this.info = info;
		Properties properties = info.getProperties();
		//1、根據郵件會話屬性和密碼驗證器構造一個傳送郵件的session
		Session sendMailSession  = Session.getDefaultInstance(properties);
		//開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
		sendMailSession.setDebug(true);
		try {
			//2、通過session得到transport物件,以便連線郵箱併發送  
            Transport transport = sendMailSession.getTransport();  
            //3、使用郵箱的使用者名稱和密碼連上郵件伺服器,傳送郵件時,發件人需要提交郵箱的使用者名稱和密碼給SMTP伺服器,使用者名稱和密碼都通過驗證之後才能夠正常傳送郵件給收件人。
			transport.connect("smtp.163.com", "@163.com", "811"); 
			//4、建立郵件訊息
			Message mailMessage = createAttachmentMail(sendMailSession,list);
			//5、傳送郵件訊息
			transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 傳送複雜郵件
	 * @param info
	 */
	public void sendMixedMail(MailSendInfo info,ArrayList<String> list){

		this.info = info;
		Properties properties = info.getProperties();
		//1、根據郵件會話屬性和密碼驗證器構造一個傳送郵件的session
		Session sendMailSession  = Session.getDefaultInstance(properties);
		//開啟Session的debug模式,這樣就可以檢視到程式傳送Email的執行狀態
		sendMailSession.setDebug(true);
		try {
			//2、通過session得到transport物件,以便連線郵箱併發送  
            Transport transport = sendMailSession.getTransport();  
            //3、使用郵箱的使用者名稱和密碼連上郵件伺服器,傳送郵件時,發件人需要提交郵箱的使用者名稱和密碼給SMTP伺服器,使用者名稱和密碼都通過驗證之後才能夠正常傳送郵件給收件人。
			transport.connect("smtp.163.com", "[email protected]", "333333"); 
			//4、建立郵件訊息
			Message mailMessage = createMixedMail(sendMailSession,list);
			//5、傳送郵件訊息
			transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 建立複雜的郵件(包括圖片和多附件的郵件)
	 * @param sendMailSession
	 * @param list 是選中CSV檔案的集合
	 * @return
	 */
	private Message createMixedMail(Session sendMailSession,ArrayList<String> list) {
		// 建立郵件
		MimeMessage message = null;
		try {
			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());

			// 正文
			MimeBodyPart text = new MimeBodyPart();
			text.setContent(info.getContent(),
					"text/html;charset=UTF-8");

			/*// 圖片
			MimeBodyPart image = new MimeBodyPart();
			image.setDataHandler(new DataHandler(new FileDataSource(Environment.getExternalStorageDirectory().getPath()+"/貓咪.jpg")));
			image.setContentID("貓咪.jpg");*/

			// 附件1
			MimeBodyPart attach = new MimeBodyPart();
			DataHandler dh = new DataHandler(new FileDataSource(Environment.getExternalStorageDirectory().getPath()+"/zed_authorize.txt"));
			attach.setDataHandler(dh);
			attach.setFileName(dh.getName());

			// 附件2
			MimeBodyPart attach2 = new MimeBodyPart();
			DataHandler dh2 = new DataHandler(new FileDataSource(Environment.getExternalStorageDirectory().getPath()+"/error_log_z9.txt"));
			attach2.setDataHandler(dh2);
			attach2.setFileName(MimeUtility.encodeText(dh2.getName()));

			/*// 描述關係:正文和圖片
			MimeMultipart mp1 = new MimeMultipart();
			mp1.addBodyPart(image);
			mp1.setSubType("related");*/

			// 描述關係:正文和附件
			MimeMultipart mp2 = new MimeMultipart();
			mp2.addBodyPart(text);
			mp2.addBodyPart(attach);
			mp2.addBodyPart(attach2);

			/*// 代表正文的BodyPart
			MimeBodyPart content = new MimeBodyPart();
			content.setContent(mp1);
			mp2.addBodyPart(content);*/

			mp2.setSubType("mixed");
			message.setContent(mp2);
			message.saveChanges();

			// 將建立的Email寫入到E盤儲存
			//message.writeTo(new FileOutputStream("E:\\MixedMail.eml"));
		} catch (Exception e) {
			Log.e("TAG", "建立複雜郵件失敗");
			e.printStackTrace();
		}
		// 返回建立好的的郵件
		return message;

	}
	/**
	 * 建立帶有附件的郵件
	 * @param sendMailSession
	 * @param list 選中的CSV檔案的集合
	 * @return
	 */
	private Message createAttachmentMail(Session sendMailSession,ArrayList<String> list) {
		//建立郵件
		MimeMessage message = null;
		try {
			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);
			for (int i = 0; i < list.size(); i++) {
				// 建立郵件附件
				MimeBodyPart attach = new MimeBodyPart();
				DataHandler dh = new DataHandler(new FileDataSource(path + list.get(i)));
				attach.setDataHandler(dh);
				attach.setFileName(MimeUtility.encodeText(dh.getName())); 
				mp.addBodyPart(attach);
			}
			mp.setSubType("mixed");
			message.setContent(mp);
			message.saveChanges();
			// 將建立的Email寫入到E盤儲存
			//message.writeTo(new FileOutputStream("E:\\attachMail.eml"));
		} catch (Exception e) {
			Log.e("TAG", "建立帶附件的郵件失敗");
			e.printStackTrace();
		}
		// 返回生成的郵件
		return message;
	}
	/**
	 *生成一封郵件正文帶圖片的郵件
	 * @param sendMailSession
	 * @return
	 */
	private MimeMessage createImageMail(Session sendMailSession) {
		//建立郵件
		MimeMessage mailMessage = null;
		try {
			mailMessage = new MimeMessage(sendMailSession);
			// 設定郵件的基本資訊
			//建立郵件傳送者地址
			Address from = new InternetAddress(info.getFromAddress());
			//設定郵件訊息的傳送者
			mailMessage.setFrom(from);
			//建立郵件的接受者地址,並設定到郵件訊息中
			Address to = new InternetAddress(info.getToAddress());
			 //設定郵件訊息的接受者, Message.RecipientType.TO屬性表示接收者的型別為TO 
			mailMessage.setRecipient(Message.RecipientType.TO, to);
			//郵件標題
			mailMessage.setSubject(info.getSubject());
			// 準備郵件資料
			// 準備郵件正文資料
			MimeBodyPart text = new MimeBodyPart();
			text.setContent("這是一封郵件正文帶圖片<img src='cid:xxx.jpg'>的郵件", "text/html;charset=UTF-8");
			// 準備圖片資料
			MimeBodyPart image = new MimeBodyPart();
			DataHandler dh = new DataHandler(new FileDataSource("src\\1.jpg"));
			image.setDataHandler(dh);
			image.setContentID("xxx.jpg");
			// 描述資料關係
			MimeMultipart mm = new MimeMultipart();
			mm.addBodyPart(text);
			mm.addBodyPart(image);
			mm.setSubType("related");
			mailMessage.setContent(mm);
			mailMessage.saveChanges();
			//將建立好的郵件寫入到E盤以檔案的形式進行儲存
			mailMessage.writeTo(new FileOutputStream("E:\\ImageMail.eml"));
			//返回建立好的郵件
		} catch (Exception e) {
			Log.e("TAG", "建立帶有圖片的郵件訊息失敗");
			e.printStackTrace();
		}
		return mailMessage;
	}
	/**
	 * 建立純文字內容的郵件訊息
	 * @param sendMailSession
	 * @return
	 */
	public MimeMessage createSimpleMail(Session sendMailSession){
		MimeMessage mailMessage = null;
		try {
			//根據session建立一條郵件資訊
			mailMessage = new MimeMessage(sendMailSession);
			//建立郵件傳送者地址
			Address from = new InternetAddress(info.getFromAddress());
			//設定郵件訊息的傳送者
			mailMessage.setFrom(from);
			//建立郵件的接受者地址,並設定到郵件訊息中
			Address to = new InternetAddress(info.getToAddress());
			 //設定郵件訊息的接受者, Message.RecipientType.TO屬性表示接收者的型別為TO 
			mailMessage.setRecipient(Message.RecipientType.TO, to);
			//設定郵件標題
			mailMessage.setSubject(info.getSubject());
			//設定郵件內容
			mailMessage.setText(info.getContent());
			//設定郵件傳送的時間
			mailMessage.setSentDate(new Date());
		} catch (Exception e) {
			Log.e("TAG", "郵件訊息建立失敗");
			e.printStackTrace();
		}
		return mailMessage;
	}
}

下面是傳送郵件的欄位資訊

import java.util.Properties;

/**
 * 郵件的設定資訊
 * @author Administrator
 *
 */
public class MailSendInfo {

	/**
	 * 傳送郵件的伺服器的IP和埠
	 */
	private String mailServerHost;
	private String mailServerPort;
	/**
	 * 郵件傳送者的地址
	 */
	private String fromAddress;
	/**
	 * 郵件接受者的地址
	 */
	private String toAddress;
	/**
	 * 登陸郵件傳送伺服器的使用者名稱和密碼
	 */
	private String userName;
	private String passWord;
	/**
	 * 是否需要身份驗證
	 */
	private boolean validate = false;
	/**
	 * 郵件傳送的主題
	 */
	private String subject;
	/**
	 * 郵件傳送的內容
	 */
	private String content;
	/**
	 * 郵件附件的檔名
	 */
	private String[] attachFileNames;  
	
	/**
	 * 獲取郵件會話屬性
	 * @return
	 */
	public Properties getProperties(){
		Properties p = new Properties();
		p.put("mail.smtp.host", this.mailServerHost);
		p.put("mail.smtp.port", this.mailServerPort);
		p.put("mail.transport.protocol", "smtp");
		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 getMailServerPost() {
		return mailServerPort;
	}

	public void setMailServerPost(String mailServerPost) {
		this.mailServerPort = mailServerPost;
	}

	public String getFromAddress() {
		return fromAddress;
	}

	public void setFromAddress(String fromAddress) {
		this.fromAddress = fromAddress;
	}

	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 getPassWord() {
		return passWord;
	}

	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}

	public boolean isValidate() {
		return validate;
	}

	public void setValidate(boolean validate) {
		this.validate = validate;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String[] getAttachFileNames() {
		return attachFileNames;
	}

	public void setAttachFileNames(String[] attachFileNames) {
		this.attachFileNames = attachFileNames;
	}
	
}

顯示傳送郵件對話方塊是自定義的對話方塊,XML程式碼如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:gravity="center" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="設定郵件資訊"
                android:textSize="18sp" />
        </LinearLayout>
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_marginTop="15dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="3.0"
            android:gravity="right"
            android:text="郵箱名稱:" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1.0" >

            <EditText
                android:id="@+id/email_contact"
                android:layout_width="180dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="50dp"
                android:textSize="12sp"
                 />

            <ImageView
                android:id="@+id/iv_arrow"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:layout_alignRight="@id/email_contact"
                android:layout_alignTop="@id/email_contact"
                android:background="@drawable/down_arrow" />

            <ImageView
                android:id="@+id/add_contact"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:layout_marginLeft="5dp"
                android:layout_toRightOf="@id/iv_arrow"
                android:background="@drawable/btn_add_contact"
                android:contentDescription="@string/app_name" />
        </RelativeLayout>
    </LinearLayout>

    <!-- <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="3.0"
            android:gravity="right"
            android:text="郵件標題:" />

        <EditText
            android:id="@+id/email_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="50dp"
            android:layout_weight="1.0" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="3.0"
            android:gravity="right"
            android:text="郵件內容:" />

        <EditText
            android:id="@+id/email_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="50dp"
            android:layout_weight="1.0" />
    </LinearLayout> -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_ok"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="確定傳送" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消傳送" />
    </LinearLayout>

</LinearLayout>


注意,

1、在MultiMailSend類中傳送普通文字和附件,我在android上除錯過可以使用,但傳送圖片,我沒除錯通過,需要在web中才能傳送成功,程式碼先貼在這裡,

等以後找到了解決方法後再分享

2、需要加上聯網許可權

3、要讀取SD卡中的檔案,要加上讀取SD卡的許可權

相關推薦

使用方式Android 傳送檔案指定郵箱附件

第一種方法,呼叫系統的郵件軟體來發送 眾所周知在Android中呼叫其他程式進行相關處理,都是使用的Intent。當然,Email也不例外。  在Android中,呼叫Email有三種類型的Intent:  Intent.ACTION_SENDTO  無附件的傳送  

android開啟另外的app方式內建到自己本身的app重新開啟app

android開啟另外的app兩種方式,內建到自己本身的app空間,重新開啟app空間, 目錄 1、內建到自己本身的app空間, 被開啟的app的activity的主配置檔案的程式碼編寫、 <activity android:n

KEIL / MDK生成BIN檔案方式直接複製就能用

在After Build/Rebuild選項卡中,勾選 "Run # 1",在後面輸入框寫入bin檔案生成方式,如下 圖1 第一種方式:設定絕對路徑(個人實踐過,沒有成功,不知道為什麼) "D:\Program Files\MDK516\ARM\ARMCC\bin\

Http協議中主要常見的傳送資料到伺服器有哪方式方式的特點和區別以及其在Http協議中的位置

Get 和 Post 的區別兩點: 一、這兩者傳遞引數時所用的編碼不一定是一樣的。在 Tomcat 中似乎 Get 的編碼方式是根據頁面中指定的編碼方式,而 Post 則是一直使用同一種編碼方式,可在 Tomcat 的 server.xml 中配置。 二、使用 Get 的時候,引數會顯示在位址列上,而 Po

Android 跑馬燈效果實現的方式解決和viewpager的衝突問題

第一篇部落格寫一點簡單的東西,多麼的簡單,就是一個跑馬燈,簡單的要死。所以話不多,寫起來。首先我們來講一個段子先緩和一下氣氛。大學的時候,隔壁宿舍老喜歡蹭我的wifi,煩死了,然後我把wifi名改成了:206有個帥哥是誰。密碼是我的名字,媽的看誰還蹭,結果。除了

HttpClient傳送請求get和post方式分別引數和不引數

(一)、匯入HttpCLient的jar包 <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <arti

javascript消除字符串兩邊空格的方式面向對象和函數式編程

xxx 字符 name tco 由於 pre 字符串 對象實例 () 主要是javascript中消除字符串空格,比較兩種方式的不同 //面向對象,消除字符串兩邊空格 String.prototype.trim = function() { return this.rep

對Java代碼加密的方式防止反編譯

java加密使用Virbox Protector對Java項目加密有兩種方式,一種是對War包加密,一種是對Jar包加密。Virbox Protector支持這兩種文件格式加密,可以加密用於解析class文件的java.exe,並且可以實現項目源碼綁定制定設備,防止部署到客戶服務器的項目被整體拷貝。兩種加密方

操作系統編程語言分類執行python方式變量內存管理定義變量的三特征

什麽 height 取代 沒有 一個 Coding 開發 軟件 簡單 操作系統 1、什麽是操作系統 操作系統位於計算機硬件與應用軟件之間 是一個協調、管理、控制計算機硬件資源與軟件資源的控制程序2、為何要有操作系統? 1、控制硬件 2、把對硬件的復雜

python制作電腦定時關機辦公神器另含其它方式無需編程!

自動 靜態 自己的 基礎 win src 成功 他會 bsp 小編本人目前就是在電腦面前工作,常常會工作到淩晨兩三點還在為自己的夢想奮鬥著。有時在辦公椅上就稀裏糊塗睡著了,我相信有很多朋友和我一樣,這樣是很不好的。第一對身體不好,第二對電腦不好。 對身體方面,小編也

實現線程的方式賣票場景親測可用

fig his nts conf desc end scrip thread tar 寫在開始 賣票場景:   多線程共同賣票,總票數在多個賣票窗口共享 實現方式:   1繼承Thread類;   2實現Runnable接口 正文開始 方式1 Thread繼承 packa

Maven執行TestNG的testcase 方式testng.xmltestngCase.java

詳情參照: http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html 1.maven通過maven-surefire-plugin來執行maven專案中src/test/j

Axios傳參的方式表單資料和json字串Form Data和Request Payload

第一種方式:Form Data Axios引數配置: 1、引入 import Qs from 'qs' 2、 return request({ headers: { 'Content-Type': 'application/x-www-form-

java之執行緒建立的方式狀態和匿名內部類建立子類或實現類物件

一.匿名內部類建立子類或實現類物件 new Test(){} 相當於建立了Test類的子類物件 並且沒有類名 建立介面實現類 new 介面名() {};介面實現類的物件 注意 : new 後邊是類或者介面名 大括號內是類或者介面中的方法 public

PHP實現無限極分類的方式遞迴和引用

https://blog.csdn.net/falcom_fans/article/details/75579663 說到無限極分類,比較常見的做法是在建表的時候,增加一個PID欄位用來區別自己所屬的分類   由於展示資料的時候,需要表達出這種所屬關係,所以必然要在讀取資料

Java ZXing 生成QRCode二維碼的方式可設定圖片大小和外白色邊框大小

QRGen在ZXing基礎上開發,這個庫使得利用Java生成QR碼變為小菜一碟。它需要依賴ZXing,所以生成圖案時你同時需要ZXing和QRGen的jar包。 QR 碼最常見的應用便是為網站中一個特定的網頁或下載頁帶來流量。因此,QR碼常常會編碼URL或網站地址,使用者可以通過手機攝像頭掃描,並在其瀏覽器中

關於頁面定時重新整理的方式記錄總結

第一種方式可以通過前臺js setTimeout函式來設定定時重新整理的~~ setTimeout(function(){window.location=window.location},120000); 第二種meta新增refresh標籤 在一定時間後自動的重新整理或

實現執行緒的方式區別和好處有哪些

 一種是擴充套件java.lang.Thread類 另一種是實現java.lang.Runnable介面 區別就是:第一種是擴充套件,第二種是實現 好處就是: 在實際開發中通常以實現Runnable介面為主,因為實現Runnable介面相比繼承Thread類可以避免繼承的侷

js 實現純前端將資料匯出excel方式親測有效

由於專案需要,需要在不呼叫後臺介面的情況下,將json資料匯出到excel表格,參考了好多資料以及很多大佬寫的部落格終於實現,相容chrome沒問題,其他還沒有測試過,這邊介紹兩種實現方式,並附上程式碼和gif動圖,博主不才還望輕噴方法一將table標籤,包括tr、td等對j

SpringBoot配置Bean的方式--註解以及配置檔案

一、註解方式 編寫實體類: package com.example.bean; import org.springframework.boot.context.properties.ConfigurationProperties; /** * C