android后台发送邮件

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

public class SendEmail {
    private static final String TAG = "SendEmail";
    //要发送Email地址
    private String mailTo = null;
    //邮件发送来源地址
    private String mailFrom = null;
    //SMTP主机地址
    private String smtpHost = null;
    //是否启用调试
    private boolean debug = false;

    private String messageBasePath = null;
    //Email主题
    private String subject;

    public void setMailTo(String mailTo) {
        this.mailTo = mailTo;
    }

    public void setMailFrom(String mailFrom) {
        this.mailFrom = mailFrom;
    }

    public void setSmtpHost(String smtpHost) {
        this.smtpHost = smtpHost;
    }

    public void setDebug(boolean debug) {
        this.debug = debug;
    }

    public void setMessageBasePath(String messageBasePath) {
        this.messageBasePath = messageBasePath;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public void setMsgContent(String msgContent) {
        this.msgContent = msgContent;
    }

    public void setAttachedFileList(Vector attachedFileList) {
        this.attachedFileList = attachedFileList;
    }

    public void setEmailAccount(String emailAccount) {
        this.emailAccount = emailAccount;
    }

    public void setEmailPwd(String emailPwd) {
        this.emailPwd = emailPwd;
    }

    public void setMessageContentType(String messageContentType) {
        this.messageContentType = messageContentType;
    }

    public void setEmailbccTo(String emailbccTo) {
        this.emailbccTo = emailbccTo;
    }

    public void setEmailccTo(String emailccTo) {
        this.emailccTo = emailccTo;
    }

    //Email内容
    private String msgContent;

    private Vector attachedFileList;
    private String emailAccount = null;
    private String emailPwd = null;
    private String messageContentType = "text/html;charset=utf-8";

    private String emailbccTo = null;
    private String emailccTo = null;

    /*
    默认构造函数
     */
    public SendEmail() {
        super();
    }

    private void writeEmail(Session session, Message message) throws MessagingException {
        String fileName;
        Multipart multipart = new MimeMultipart();
        //设定发件人地址
        if (mailFrom != null) {
            message.setFrom(new InternetAddress(mailFrom));
            Log.i(TAG, "发件人邮件地址:" + mailFrom);
        } else {
            Log.i(TAG, "没有指定发件人邮件地址");
            return;
        }
        //设定收件人地址
        if (mailTo != null) {
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
            Log.i(TAG, "收件人邮件地址:" + mailTo);
        } else {
            Log.i(TAG, "没有指定收件人邮件地址");
            return;
        }
        //设定抄送地址
        if (emailccTo != null) {
            message.setRecipient(Message.RecipientType.CC, new InternetAddress(emailccTo));
            Log.i(TAG, "抄送邮件地址:" + emailccTo);
        } else {
            Log.i(TAG, "没有指定抄送邮件地址");
            return;
        }
        //设定密送地址
        if (emailbccTo != null) {
            message.setRecipient(Message.RecipientType.BCC, new InternetAddress(emailbccTo));
            Log.i(TAG, "密送邮件地址:" + emailbccTo);
        } else {
            Log.i(TAG, "没有指定密送邮件地址");
            return;
        }
        //设置邮件主题
        message.setSubject(subject);
        Log.i(TAG, "邮件主题:" + subject);
        //设置回复地址
        message.setReplyTo(new InternetAddress[]{new InternetAddress(mailFrom)});
        //创建并设置第一部分
        MimeBodyPart bodyPart = new MimeBodyPart();
        if (msgContent != null) {
            Log.i(TAG, "邮件内容:" + msgContent);
            bodyPart.setContent(msgContent, messageContentType);
        } else {
            bodyPart.setContent("", messageContentType);
        }
        multipart.addBodyPart(bodyPart);
        //附件文件到邮件中
        if (attachedFileList != null) {
            for (Enumeration fileList = attachedFileList.elements(); fileList.hasMoreElements(); ) {
                fileName = (String) fileList.nextElement();
                MimeBodyPart mBodyPart = new MimeBodyPart();

                FileDataSource fds = new FileDataSource(messageBasePath + fileName);
                Log.i(TAG, "Email发送的附件为:" + messageBasePath + fileName);
                mBodyPart.setDataHandler(new DataHandler(fds));
                mBodyPart.setFileName(fileName);
                multipart.addBodyPart(mBodyPart);
            }
        }
        Log.i(TAG, "设置邮件部分");
        message.setContent(multipart);
        message.setSentDate(new Date());
    }

    /**
     * 发送邮件方法
     *
     * @return true 表示发送成功,false表示不成功
     */
    public boolean sendEmail() {
        int loopCount;
        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", smtpHost);
        properties.setProperty("mail.smtp.auth", "true");
        properties.put("mail.smtp.port", "25");
        MailAuthenticator authenticator = new MailAuthenticator();
        Session session = Session.getInstance(properties, authenticator);
        session.setDebug(debug);
        MimeMessage mimeMessage = new MimeMessage(session);

//这里如果用Transport的话会出现错误
        SMTPTransport transport = new SMTPTransport(session, new URLName("smtp", "smtp.qq.com", 25, null, MailAuthenticator.TENCENT_EMAIL_USER, MailAuthenticator.TENCENT_EMAIL_PWD));
        try {
            writeEmail(session, mimeMessage);
            //transport = session.getTransport("smtp");
            try {
                Log.i(TAG, "开始连接服务器");
                transport.connect(smtpHost, 25, MailAuthenticator.TENCENT_EMAIL_USER, MailAuthenticator.TENCENT_EMAIL_PWD);
            } catch (AuthenticationFailedException e) {
                e.printStackTrace();
                Log.i(TAG, "连接服务器失败");
                return false;
            } catch (MessagingException e) {
                e.printStackTrace();
                Log.i(TAG, "发送邮件过程中出现错误");
                return false;
            }
            Log.i(TAG, "开始发送邮件");
            transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
            transport.close();
            Log.i(TAG, "关闭连接");
        } catch (MessagingException e) {
            e.printStackTrace();
            Log.i(TAG, "发送邮件失败");
            return false;
        } finally {
            try {
                if (transport != null && transport.isConnected()) {
                    transport.close();
                    Log.i(TAG, "在finally中关闭连接");
                }
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
        Log.i(TAG, "邮件发送成功");
        return true;
    }
}

tips---其中的MyAuthenticator类继承自Authenticator,重写这个方法即可

@Override
protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(邮箱用户名,密码);
}