編輯:關於Android編程
一個項目的需求,之前一篇博客寫過如何生成excel,生成後的excel要發送給用戶(指定郵箱)。奇葩的後台說這個發送也不好實現,要客戶端來做。也就只能做了(又是分分鐘要來個螺旋王)。本篇博客就簡單介紹下android如何發送郵件。結果圖如下:
這裡我說的只是一種方法,其實發送郵件的方式有很多。在之前的那個生成excel的項目繼續擴展。沒看過之前項目的可以先看下:android生成excel。
首先要導入發送郵件的相應jar包,有三個,分別是activation.jar,additional.jar和mail.jar。這些jar包能在後面的工程中找到。如圖:
然後寫一個發送郵件工具類來寫發送郵件的底層代碼,先把代碼貼出來。
public class EmailUtil {
class MyAuthenticator extends javax.mail.Authenticator {
private String strUser;
private String strPwd;
public MyAuthenticator(String user, String password) {
this.strUser = user;
this.strPwd = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(strUser, strPwd);
}
}
public void sendMail(String toMail, String fromMail, String server,
String username, String password, String title, String body,
String attachment) throws Exception {
Properties props = System.getProperties();// Get system properties
//添加郵箱地址。
props.put("mail.smtp.host", server);// Setup mail server
props.put("mail.smtp.auth", "true");
//添加郵箱權限
MyAuthenticator myauth = new MyAuthenticator(username, password);// Get
Session session = Session.getDefaultInstance(props, myauth);
MimeMessage message = new MimeMessage(session); // Define message
//設置目的郵箱
message.setFrom(new InternetAddress(fromMail)); // Set the from address
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
toMail));// Set
//設置郵件的標題
message.setSubject(title);// Set the subject
// message.setText(MimeUtility.encodeWord(body));// Set the content
MimeMultipart allMultipart = new MimeMultipart("mixed");
MimeBodyPart attachPart = new MimeBodyPart();
//添加附件
FileDataSource fds = new FileDataSource(attachment);
attachPart.setDataHandler(new DataHandler(fds));//附件
attachPart.setFileName(MimeUtility.encodeWord(fds.getName()));
MimeBodyPart textBodyPart = new MimeBodyPart();
//添加郵件內容
textBodyPart.setText(body);
allMultipart.addBodyPart(attachPart);
allMultipart.addBodyPart(textBodyPart);
message.setContent(allMultipart);
message.saveChanges();
Transport.send(message);//發送郵件
}
}
toMail:是發送目的的郵箱。
fromMail:是用於發送的郵箱。
server:固定寫為”smtp.mxhichina.com”。這是阿裡雲企業郵箱地址。
account:指用於發送郵件的郵箱賬號。
password:指用於發送郵件的郵箱密碼。
title,body:不用說,就是郵件的題目和內容。
attachment:表示上傳的附件在手機中的路徑。
代碼都加了注釋,還是比較清楚的。重點看下添加附件部分,因為內容有兩部分,有文字內容和附近,所以要用MimeMultipart 來實現兩部分的添加。MimeBodyPart生於添加一部分的內容,setText方法用於添加方字內容。setFileName用於添加附件內容,具體的看代碼。
接下來就是發送郵件的業務層代碼了。看下MainActivity代碼:
public class MainActivity extends Activity {
Button btn,btn1;
List orders = new ArrayList();
String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int length = Const.OrderInfo.orderOne.length;
for(int i = 0;i < length;i++){
Order order = new Order( Const.OrderInfo.orderOne[i][0], Const.OrderInfo.orderOne[i][1], Const.OrderInfo.orderOne[i][2], Const.OrderInfo.orderOne[i][3]);
orders.add(order);
}
btn = (Button)super.findViewById(R.id.btn);
btn1 = (Button)super.findViewById(R.id.btn1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String fileName = "excel_"+new Date().toString();
path = "/MailDemo/" + fileName ;
try {
ExcelUtil.writeExcel(MainActivity.this,
orders, path);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String pathString = getExternalFilesDir(null).getPath()+path;
sendMail("[email protected]", "訂單",
"郵件由系統自動發送,請不要回復!", pathString+ ".xls");
Toast.makeText(MainActivity.this, "郵件發送成功", Toast.LENGTH_SHORT).show();
}
});
}
public void sendMail(final String toMail, final String title,
final String body, final String path){
new Thread(new Runnable() {
public void run() {
EmailUtil emailUtil = new EmailUtil();
try {
String account = "[email protected](your mail)";
String password = "xxx(your password)";
emailUtil.sendMail(toMail, account, "smtp.mxhichina.com",
account, password, title, body, path);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
重點看下sendMail方法,其實很簡單,就是把對應的參數往裡傳,分別傳入你的郵箱密碼、你要發送的目的郵件、郵件的內容題目及附件路徑。但是注意要開啟一個線程來發郵件,因為發郵件的時間可能比較長,在主線程中發的話可以會導致NAR。這裡還有一點要注意的是傳入附件的路徑要和excel生成的路徑一致,才能找到文件。如果是批量發送郵件,就要考慮使用線程池,但如果是批量發的話,一般都是在後台進行處理。
到此發送郵件的功能就實現了。還是比較簡單實用的。
1.git的介紹git是一種項目版本控制工具,公司開發一般多用git,或者svn進行代碼托管,最近,因為項目涉及到多人合作開發,所以趁著有空分享一下經驗,以免各位走彎路。
本來准備在ListView的每個Item的布局上設置一個隱藏的Button,當滑動的時候顯示。但是因為每次只要存在一個Button,發現每個Item上的Button相互間
在前兩篇文章當中,我們主要學習了Android內存方面的相關知識,包括如何合理地使用內存,以及當發生內存洩露時如何定位出問題的原因。那麼關於內存的知識就討論到這裡,今天開
一、簡介這個題目是別人面試UC優視集團Android逆向工程師一職位的面試題,相比較前面的面試題1,增加了一些難度。 二、題目分析1.使