Android利用Java Mail实现自动发送邮件

来源:互联网 发布:天涯明月刀男捏脸数据 编辑:程序博客网 时间:2024/06/07 00:34

为了净化网络大环境,请不要利用这个方法发送垃圾邮件,敬请合理合法使用!

我们在用邮箱注册一个软件的时候,通常它都会给我的邮箱发送个激活确认的邮件。这个一般情况下都是服务器端来进行处理的,但是突然间想知道Android客户端应该会有方法同样实现这个功能——利用某个特定邮箱账号向用户自动发送邮件!Android系统有自带的Email进行发送邮件,但这种会展示给用户,我们这里讲的是默认不显示给用户,也就是"偷偷"的发送!

我们需要用到三个jar包 android_mail.jar 。

首先,我们先定义一个邮件的bean类

public class MailBean implements Serializable {    //发送人    private String sender;    // 收件人    private List<String> recipientsTO;    // 抄送人    private List<String> recipientsCC;    // 密送人    private List<String> recipientsBCC;    //主题    private String subject;    // 正文    private String body;    // 附件列表    private List<String> attachments;    public String getSender() {        return sender;    }    public void setSender(String sender) {        this.sender = sender;    }    public List<String> getRecipientsTO() {        return recipientsTO;    }    public void setRecipientsTO(List<String> recipientsTO) {        this.recipientsTO = recipientsTO;    }    public List<String> getRecipientsCC() {        return recipientsCC;    }    public void setRecipientsCC(List<String> recipientsCC) {        this.recipientsCC = recipientsCC;    }    public List<String> getRecipientsBCC() {        return recipientsBCC;    }    public void setRecipientsBCC(List<String> recipientsBCC) {        this.recipientsBCC = recipientsBCC;    }    public String getSubject() {        return subject;    }    public void setSubject(String subject) {        this.subject = subject;    }    public String getBody() {        return body;    }    public void setBody(String body) {        this.body = body;    }    public List<String> getAttachments() {        return attachments;    }    public void setAttachments(List<String> attachments) {        this.attachments = attachments;    }    @Override    public String toString() {        return "MailBean{" +                "sender='" + sender + '\'' +                ", recipientsTO=" + recipientsTO +                ", recipientsCC=" + recipientsCC +                ", recipientsBCC=" + recipientsBCC +                ", subject='" + subject + '\'' +                ", body='" + body + '\'' +                ", attachments=" + attachments +                '}';    }}

接下来就是最重要的发送邮件的工具类:

配置发送邮件账户的属性:我这里用的是126邮箱,使用gmail等其他邮箱smtp的配置都失效了,暂时还未找到解决的方法,如谁有解决方法,还请评论告知!

    private final static Session session;    private final static String user = "*****@126.com";//你的邮箱账号    private final static String password = "******";//你的邮箱密码    static {        Properties properties = new Properties();        properties.put("mail.smtp.host", "smtp.126.com");//邮箱的host地址,基本都是smtp.****.com        properties.put("mail.smtp.port", "25");//邮箱smtp端口号        properties.put("mail.smtp.auth", "true");//开启smtp验证        properties.put("mail.debug", "false");        session = Session.getInstance(properties, new Authenticator() {            @Override            protected PasswordAuthentication getPasswordAuthentication() {                return new PasswordAuthentication(user, password);            }        });    }

接下载是地址字符串构造成网络地址对象的方法,这里考虑到可能会发给多个账号等。

    private static InternetAddress[] listToAddresses(List<String> list) {        if (list != null && !list.isEmpty()) {            int size = list.size();            InternetAddress[] addresses = new InternetAddress[size];            try {                for (int i = 0; i < size; i++) {                    addresses[i] = new InternetAddress(list.get(i));                }                return addresses;            } catch (AddressException ex) {                ex.printStackTrace();            }        }        return null;    }

执行发送邮件的方法:

public static void sendMail(MailBean mail) {        try {            MimeMessage msg = new MimeMessage(session);            //设置邮件发件人            msg.setFrom(new InternetAddress(user));            //设置邮件收件人            msg.setRecipients(Message.RecipientType.TO, listToAddresses(mail.getRecipientsTO()));            //设置邮件抄送人            msg.setRecipients(Message.RecipientType.CC, listToAddresses(mail.getRecipientsCC()));            //设置邮件密送人            msg.setRecipients(Message.RecipientType.BCC, listToAddresses(mail.getRecipientsBCC()));            //设置邮件主题            msg.setSubject(mail.getSubject(), "utf-8");            //设置邮件正文            Multipart mp = new MimeMultipart();            MimeBodyPart mbp = new MimeBodyPart();            mbp.setContent(mail.getBody(), "text/html; charset=utf-8");            mp.addBodyPart(mbp);            //设置邮件附件            List<String> attachments = mail.getAttachments();            if (attachments != null && !attachments.isEmpty()) {                for (String attachment : attachments) {                    MimeBodyPart attach = new MimeBodyPart();                    attach.attachFile(attachment);                    mp.addBodyPart(attach);                }            }            msg.setContent(mp);            //设置发送时间            msg.setSentDate(new Date());            //发送            Transport.send(msg);        } catch (MessagingException | IOException ex) {            ex.printStackTrace();        }    }

完整的代码:

public class MailUtil { private final static Session session;    private final static String user = "*****@126.com";//你的邮箱账号    private final static String password = "******";//你的邮箱密码    static {        Properties properties = new Properties();        properties.put("mail.smtp.host", "smtp.126.com");//邮箱的host地址,基本都是smtp.****.com        properties.put("mail.smtp.port", "25");//邮箱smtp端口号        properties.put("mail.smtp.auth", "true");//开启smtp验证        properties.put("mail.debug", "false");        session = Session.getInstance(properties, new Authenticator() {            @Override            protected PasswordAuthentication getPasswordAuthentication() {                return new PasswordAuthentication(user, password);            }        });    }    public static void sendMail(MailBean mail) {        try {            MimeMessage msg = new MimeMessage(session);            //设置邮件发件人            msg.setFrom(new InternetAddress(user));            //设置邮件收件人            msg.setRecipients(Message.RecipientType.TO, listToAddresses(mail.getRecipientsTO()));            //设置邮件抄送人            msg.setRecipients(Message.RecipientType.CC, listToAddresses(mail.getRecipientsCC()));            //设置邮件密送人            msg.setRecipients(Message.RecipientType.BCC, listToAddresses(mail.getRecipientsBCC()));            //设置邮件主题            msg.setSubject(mail.getSubject(), "utf-8");            //设置邮件正文            Multipart mp = new MimeMultipart();            MimeBodyPart mbp = new MimeBodyPart();            mbp.setContent(mail.getBody(), "text/html; charset=utf-8");            mp.addBodyPart(mbp);            //设置邮件附件            List<String> attachments = mail.getAttachments();            if (attachments != null && !attachments.isEmpty()) {                for (String attachment : attachments) {                    MimeBodyPart attach = new MimeBodyPart();                    attach.attachFile(attachment);                    mp.addBodyPart(attach);                }            }            msg.setContent(mp);            //设置发送时间            msg.setSentDate(new Date());            //发送            Transport.send(msg);        } catch (MessagingException | IOException ex) {            ex.printStackTrace();        }    }    /**     * 把list里的地址字符串构造成网络地址对象的数组     */    private static InternetAddress[] listToAddresses(List<String> list) {        if (list == null || list.isEmpty()) return null;        int size = list.size();        InternetAddress[] addresses = new InternetAddress[size];        try {            for (int i = 0; i < size; i++) {                addresses[i] = new InternetAddress(list.get(i));            }            return addresses;        } catch (AddressException ex) {            ex.printStackTrace();        }        return null;    }}


1 0
原创粉丝点击