Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android發送郵件

android發送郵件

編輯:關於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. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved