Java发送邮件

239 阅读1分钟

使用Java应用程序发送 E-mail 十分简单,程序依赖于两个必需的jar包 。

  • 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
  • 您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)

你也可以使用本文提供的下载链接:

 

关于邮件开发中的主要函数和参数:

JavaMail

图源:jackchan1999.github.io/2017/05/01/…

 

因为在程序开发中使用邮件的目的多是发送验证码,我把生成验证码的函数分离出来,作为单独的程序:

package Utils;

import java.util.Random;

public class regCode {
    public static String rand() {
        String sources = "0123456789"; // 加上一些字母,就可以生成带字母的验证码
        Random rand = new Random();
        StringBuffer flag = new StringBuffer();
        for (int j = 0; j < 6; j++) {
            flag.append(sources.charAt(rand.nextInt(9)) + "");
        }
        return flag.toString();
    }
}

 

关于QQ邮箱,还要设置SSL加密;163邮箱便不需要。下面的代码是基于QQ邮箱

此外,对于邮件内容,可以是正常的文本,也可以是HTML文本,当然,也要有添加附件的需求。在程序中,均会给出解决方案。注释很详细。

import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Properties;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.*;

public class SendEmail {

    static String regcode = Utils.regCode.rand(); //获取验证码

    public static void  sendEmail() throws GeneralSecurityException, MessagingException, IOException {
        // 收件人电子邮箱
        String tomail = "han-suyu@foxmail.com";

        // 发件人电子邮箱
        final String frommail = "1121687782@qq.com";    //邮箱账号
        final String fromcode = "XXXXXXXXXXXXXXXXX";     //邮箱授权码

        // 指定发送邮件的主机为 smtp.qq.com
        String host = "smtp.qq.com"; // QQ 邮件服务器,如果发件人为网易邮箱,则为"smtp.163.com"

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);


        properties.put("mail.smtp.auth", "true");
        // 关于QQ邮箱,还要设置SSL加密
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);



        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(frommail, fromcode); //发件人用户名、密码
            }
        });


        // 创建默认的 MimeMessage 对象
        MimeMessage message = new MimeMessage(session);

        // Set From: 头部头字段
        message.setFrom(new InternetAddress(frommail));

        // Set To: 头部头字段
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(tomail));

        // Set Subject: 头部头字段
        message.setSubject("这里是主题");


        //邮件内容
/***************************************************************************************/
        
//支持附件的邮件
        //创建多元素容器
        MimeMultipart list = new MimeMultipart();

        // 创建文本部分
        MimeBodyPart part1 = new MimeBodyPart();
        part1.setContent("<h3>验证码为:</h3>"+ regcode,"text/html;charset=utf-8");
        list.addBodyPart(part1);

        // 创建附件部分
        MimeBodyPart part2 = new MimeBodyPart();
        part2.attachFile(new File("D:/测试.jpg"));//设置附件的内容
        //设置显示的文件名称,其中encodeText用来处理中文乱码问题
        part2.setFileName(MimeUtility.encodeText("测试图片.txt"));  
        list.addBodyPart(part2); // 把主体部件添加到集合中

        //把整个容器加入到邮件中
        message.setContent(list);

        
        
//只有文本的邮件
/***
 *          // 设置文字消息
 *         message.setText("此次验证码为:" + regcode);
 *
 *         // 发送 HTML 消息, 可以插入html标签
 *         message.setContent("<h1>This is actual message</h1>","text/html" );
 */
        
/***************************************************************************************/


        // 发送消息
        Transport.send(message);
        
        System.out.println("邮件发送成功....");
    }
}

 

 

参考:

jackchan1999.github.io/2017/05/01/…

www.runoob.com/java/java-s…