使用兩種方式,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.xml,一種testngCase.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