首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过javax.mail从Android发送邮件

如何通过javax.mail从Android发送邮件
EN

Stack Overflow用户
提问于 2018-09-26 01:31:22
回答 1查看 117关注 0票数 1

我正在做一个应用程序有功能发送电子邮件从应用程序通过SMTP协议。我想让它在后台从应用程序发送电子邮件,而不是像其他邮件应用程序发送的使用意图。我在谷歌上搜索了一些关于javax.mail的建议。

我有SMTP服务器的信息:主机,端口,用户名,密码。

如何使用javax.mail发送电子邮件内含html的电子邮件到收件人/收件人和电子邮件附件。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-26 02:34:25

如果要使用javax.mail发送电子邮件。您可以使用以下帮助器类发送电子邮件。无论它是由后台服务发送的还是由AsyncTask发送的。看看下面类中的配置部分。

代码语言:javascript
复制
package com.company.mail.util;

import java.util.Properties;

import javax.activation.DataHandler;
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;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

public class Mail {
    public static final String EMAIL_LIST_SEPARATOR = ",";

    public boolean sendMail(String[] toEmails, String subject, String msg, boolean isHTML, String charSet, String filename, byte[] attachment) {
    if (toEmails == null || (toEmails != null && toEmails.length == 0))  return false;

    String name = "My Company Name";
    String username = "no-reply@company.com"; 
    String password = "<My Password>"; 
    String host = "smtp.company.com";
    Integer port = 465;
    String from = "no-reply@company.com";

    Properties props = new Properties();
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.socketFactory.port", port.toString());
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", port.toString());

    final String fUsername = username;
    final String fPassword = password;
    Session mailSession = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(fUsername, fPassword);
        }
    });
    //mailSession.setDebug(true);

    String recipients = ArrayUtils.toString(toEmails, "");
    Message message = new MimeMessage(mailSession);
    try {
        message.setFrom(new InternetAddress(from, name));
        message.setReplyTo(new InternetAddress[] { new InternetAddress(from, name) });
        message.setSubject(subject);
        message.setContent(msg, isHTML ? "text/html" : "text/plain");

        if (toEmails != null) {
            for (String recipient : toEmails) {
                if (recipient != null && !"".equals(recipient)) {
                    message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
                }
            }

            if (attachment != null) {
                MimeBodyPart messagePart = new MimeBodyPart();
                if (isHTML)
                    messagePart.setContent(msg, "text/html");
                else
                    messagePart.setText(msg);

                MimeBodyPart attachmentPart = new MimeBodyPart();
                attachmentPart.setDataHandler(new DataHandler(attachment, "application/octet-stream"));
                attachmentPart.setFileName(filename);

                Multipart multipart = new MimeMultipart();
                multipart.addBodyPart(messagePart);
                multipart.addBodyPart(attachmentPart);

                message.setContent(multipart);
            }

            Transport.send(message);
            Log.i(" [Mail] Recipient " + name + " <" + username + "> sent e-mail with subject " + subject + " to recipient(s): " + recipients);

            return true;
        }
    } catch (Exception e) {
        Log.e(" [Mail] Error sending " + toEmails.length  + " e-mail(s) with subject '" + subject + "' to recipient(s) (" + recipients + "): " + e.getMessage());
    }

    return false;
    }
}

您可以发送调用方法mail.sendMail(...)的电子邮件,例如:

代码语言:javascript
复制
Mail mail = new Mail();
mail.sendMail(new String[] { "someone@somewhere.com", "john.doe@mycompany.com" }, "Subject of my e-mail", "This is a message in <b>HTML</b> with <i>italics</i>.", true, "UTF-8", null, null);

该类还支持向邮件发送附件,因此可以将文件名和字节数组作为最后两个参数进行传递。

希望这个Java类对您有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52503819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档