Android發送郵件,android發送郵件許可權

來源:互聯網
上載者:User

Android發送郵件,android發送郵件許可權

項目中有些關鍵日誌需要從客戶手中拿到,為了方便的收集日誌在用戶端中加入郵件發送功能(雖然使用分享功能也能發送郵件,前提需要客戶登入手機的郵箱才行,比較麻煩,而且還進入頁面,使用者體驗不太好)。

主要實現了發送郵件,抄送,發送附件功能

先看一下:


涉及到3個jar以及封裝的介面

JEmailHelper.java
package jwzhangjie.com.javaemail;import android.os.AsyncTask;import java.util.Date;import java.util.List;import java.util.Properties;import javax.activation.CommandMap;import javax.activation.MailcapCommandMap;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.PasswordAuthentication;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;/** * Created by zhangjie on 15/8/31. */public class JEmailHelper {    private int port = 553;  //smtp協議使用的連接埠    private String host = "smtp.163.com"; // 寄件者郵件伺服器    private String user = "*******@163.com";   // 使用者帳號    private String password = "********"; //使用者密碼    private List<String> emailTos;    private List<String> emailCCs;    private String subject;    private String body;    private List<String> paths;    enum SendStatus {        SENDING, UNDO, SENDOK, SENDFAIL    }    ;    private SendStatus sendStatus;    public interface JieEmailInfterface {        void startSend();        void SendStatus(SendStatus sendStatus);    }    private JieEmailInfterface jieEmailInfterface;    public void setJieEmailInfterface(JieEmailInfterface jieEmailInfterface) {        this.jieEmailInfterface = jieEmailInfterface;    }    public JEmailHelper() {        sendStatus = SendStatus.UNDO;    }    //構造發送郵件帳戶的伺服器,連接埠,帳戶,密碼    public JEmailHelper(String host, int port, String user, String password) {        this.port = port;        this.user = user;        this.password = password;        this.host = host;        sendStatus = SendStatus.UNDO;    }    /**     * @param emailTos 主要接收人的電子郵箱列表     * @param emailCCs 抄送人的電子郵箱列表     * @param subject  郵件標題     * @param body     本文內容     * @param paths    發送的附件路徑集合     */    public void setParams(List<String> emailTos, List<String> emailCCs, String subject, String body,                          List<String> paths) {        this.emailTos = emailTos;        this.emailCCs = emailCCs;        this.subject = subject;        this.body = body;        this.paths = paths;    }    public void sendEmail() {        new JieAsynTask().execute();    }    private void sendEmailBg() throws Exception {        Properties properties = new Properties();        properties.put("mail.smtp.host", host);        properties.put("mail.smtp.port", port);        properties.put("mail.smtp.auth", "true");//true一定要加引號        properties.put("mail.transport.protocol", "smtp");        JieAuthenticator jieAuth = new JieAuthenticator(user, password);        Session session = Session.getInstance(properties, jieAuth);        //建立一個訊息        MimeMessage msg = new MimeMessage(session);        //設定發送人        msg.setFrom(new InternetAddress(user));        //設定主要接收人        if (emailTos != null && !emailTos.isEmpty()) {            int size = emailTos.size();            InternetAddress[] addresses = new InternetAddress[size];            for (int i = 0; i < size; i++) {                addresses[i] = new InternetAddress(emailTos.get(i));            }            msg.setRecipients(Message.RecipientType.TO, addresses);        }        //設定抄送人的電子郵件        if (emailCCs != null && !emailCCs.isEmpty()) {            int size = emailCCs.size();            InternetAddress[] addresses = new InternetAddress[size];            for (int i = 0; i < size; i++) {                addresses[i] = new InternetAddress(emailCCs.get(i));            }            msg.setRecipients(Message.RecipientType.CC, addresses);        }        msg.setSubject(subject);        //建立一個訊息體        MimeBodyPart msgBodyPart = new MimeBodyPart();        msgBodyPart.setText(body);        //建立Multipart增加其他的parts        Multipart mp = new MimeMultipart();        mp.addBodyPart(msgBodyPart);        //建立檔案附件        for (String path : paths) {            MimeBodyPart fileBodyPart = new MimeBodyPart();            fileBodyPart.attachFile(path);            mp.addBodyPart(fileBodyPart);        }        //增加Multipart到訊息體中        msg.setContent(mp);        //設定日期        msg.setSentDate(new Date());        //設定附件格式        MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();        mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");        mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");        CommandMap.setDefaultCommandMap(mc);        //發送訊息        Transport.send(msg);    }    class JieAuthenticator extends Authenticator {        private String strUser;        private String strPwd;        public JieAuthenticator(String user, String password) {            this.strUser = user;            this.strPwd = password;        }        protected PasswordAuthentication getPasswordAuthentication() {            return new PasswordAuthentication(strUser, strPwd);        }    }    class JieAsynTask extends AsyncTask<Void, Void, SendStatus> {        @Override        protected void onPreExecute() {            super.onPreExecute();            if (jieEmailInfterface != null) {                jieEmailInfterface.startSend();            }        }        @Override        protected void onPostExecute(SendStatus result) {            super.onPostExecute(result);            if (jieEmailInfterface != null) {                jieEmailInfterface.SendStatus(result);            }            sendStatus = SendStatus.UNDO;        }        @Override        protected SendStatus doInBackground(Void... params) {            try {                sendStatus = SendStatus.SENDING;                sendEmailBg();                sendStatus = SendStatus.SENDOK;            } catch (Exception e) {                e.printStackTrace();                sendStatus = SendStatus.SENDFAIL;            }            return sendStatus;        }    }}

package jwzhangjie.com.javaemail;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class JavaEmailActivity extends Activity {    JEmailHelper helper;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_java_email);        helper = new JEmailHelper();    }    public void sendMail(View view) {        List<String> files = new ArrayList<String>();        files.add("/mnt/sdcard/test.txt");        List<String> toEmail = new ArrayList<String>();        toEmail.add("jwzhangjie@163.com");        List<String> ccEmail = new ArrayList<String>();        ccEmail.add("1067*****@qq.com");        ccEmail.add("352****@qq.com");        helper.setParams(toEmail, ccEmail, "Android發送測試郵件", "Dear All:這是一封測試郵件!", files);        helper.setJieEmailInfterface(new JEmailHelper.JieEmailInfterface() {            @Override            public void startSend() {                showInfo("開始發送郵件");            }            @Override            public void SendStatus(JEmailHelper.SendStatus sendStatus) {                switch (sendStatus) {                    case SENDOK:                        showInfo("發送郵件成功");                        break;                    case SENDFAIL:                        showInfo("發送郵件失敗");                        break;                    case SENDING:                        showInfo("郵件正在發送中,請稍後重試");                        break;                }            }        });        helper.sendEmail();    }    public void showInfo(String msg){        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();    }}
三個jar的地址:
http://pan.baidu.com/s/1bnbi7zp

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.