Javamail[Android]发送简单邮件

1. 导入javamail for Android

javamail for Android是javamail兼容Android的版本,在build.gradle(Module: app)dependencies块下加入以下依赖即可使用

// javamail[2019.2.19]
implementation 'com.sun.mail:android-mail:1.6.2'
implementation 'com.sun.mail:android-activation:1.6.2'
2. 需要使用的类

Session类可以当做一个包含了所有同服务器连接的配置的类

Properties类主要用于设置服务器,端口,协议等等连接配置

Authenticator类主要用于身份验证,传递用户名和密码

MimeMessage类用于储存一份邮件的内容

Transport类用于连接服务器和发送邮件

3. 构造一封简单的纯文本邮件(MimeMessage类的一个实例)
public MimeMessage generateMessage(String body) throws Exception {
    String from = "january@163.com";
	String to = "hello@icloud.com";
    
    //生成一个MimeMessage实例,这里需要传入一个Session对象(这个对象的构建在后文介绍),
    MimeMessage msg = new MimeMessage(this.session);

    //发件人,可以设置成发件邮箱地址,或者使用 “别名<邮箱地址>” 的形式
    String nickname=javax.mail.internet.MimeUtility.encodeText("Noticer");
    msg.setFrom(new InternetAddress(nickname + "<" + from + ">"));
	//设置收件人邮箱,这里Message.RecipientType.TO表示发送方,还可以是抄送等
    msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));

    //设置邮件主题(title)
    msg.setSubject("New notice");
    //设置发件时间
    msg.setSentDate(new Date());
    //设置邮件体
    msg.setText(body);
    
    //保存消息,这一步不能少
    msg.saveChanges();
    return msg;
}
4. 配置邮件服务器
1. Properties部分

setProperty方法和put方法效果类似,不过setProperty参数都是字符串,而put参数可以是任意对象,建议一般使用setProperty

//代码中this.xx的表示方法所在类实例的属性变量,这里没有给出请自己定义
private Properties serverConfig() throws GeneralSecurityException {
    Properties props = new Properties();
    //常规配置
    props.setProperty("mail.transport.protocol", this.protocol);
    props.setProperty("mail.smtp.host", this.server);
    props.setProperty("mail.smtp.port", this.port);
    //是否启用用户验证
    props.setProperty("mail.smtp.auth", "true");	
    //连接邮件服务器的超时时间,单位为毫秒,不要设置过短
    props.setProperty("mail.smtp.timeout", this.timeout); 
    props.setProperty("mail.debug", "true");
	
    //安全性配置,使用TLS或者SSL加密连接
    switch (this.security){
        //TLS连接时的配置
        case "tls":
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.ssl.trust", this.server);
            break;
        //SSL连接时的配置
        case "ssl":
            props.setProperty("mail.smtp.ssl.enable", "true");
            MailSSLSocketFactory sslFactory = null;
            sslFactory = new MailSSLSocketFactory();
            props.put("mail.smtp.ssl.socketFactory", sslFactory);
    }
    return props;
}
2. Authenticator部分

Authenticator是个抽象类,我们这里使用匿名类的方式,实现getPasswordAuthentication方法,返回用用户名密码构造的PasswordAuthentication实例即可

Authenticator authenticator = new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        String usrname = "usr";
        String password = "password";
        return new PasswordAuthentication(usrname, password);
    }
};
3. 获取Session实例

使用Session.getDefaultInstance来获取session实例,该方法需要传入上面构建的PropertiesAuthenticator实例,这个session在构建MimeMessage实例时被使用

this.session = Session.getDefaultInstance(properties, authenticator);
4. 发送邮件

使用Transport.send方法发送邮件,参数为MimeMessage实例

public void send(MimeMessage msg) throws MessagingException {
        Transport.send(msg);
}

完整的用于发送简单邮件的类请查看MailManager

详细的javamail api请参考Javamail API

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值