Java SMTP发送邮件

本文提供了一个使用Java通过SMTP协议发送电子邮件的示例代码,包括配置邮件会话属性、创建邮件消息及通过指定SMTP服务器发送邮件的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package egtl.test;

import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

import java.util.Properties;
import java.util.Date;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.Message;
import javax.mail.internet.MimeMessage;

public class SMTPSender {
    public static void main(String[] args) throws Exception {
        // 下面是邮件要群发给的多个收件人地址
        String[] to = {"Wei.Gan@163.com"};

        // 创建Session对象
        Properties props = new Properties();
        /*
         * mail.smtp.localhost属性用于设置SMTP协议的EHLO命令中的
         * 主机名,其他SMTP服务器可能需要使用这个主机名确定发件SMTP 服务器的身份,这个信息可以从JavaMail的javadocs文档中的
         * com.sun.mail.smtp包的帮助页面内查看到。
         */
        props.setProperty("mail.smtp.localhost", "10.81.192.21");
        Session session = Session.getInstance(props);
        session.setDebug(true);

        Message msg = createMessage(session);
        for (int i = 0; i < to.length; i++) {
            try {
                sendMessage(session, msg, to[i]);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static Message createMessage(Session session) throws Exception {

        String from = "Nan.Chen@163.com";// 发件人地址
        String subject = "SMTPSender demo";// 邮件主题
        String body = "This is a Lotus Notes Test...";// 邮件内容

        // 创建代表邮件的MimeMessage对象,不包含收件人地址
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(from));
        msg.setSentDate(new Date());
        msg.setSubject(subject);
        msg.setText(body);
        return msg;
    }

    public static void sendMessage(Session session, Message msg, String to)
            throws Exception {
        // 设置邮件内容的收件人并生成邮件消息内容
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        msg.saveChanges();

        // 连接收件人地址所在的SMTP服务器并发送邮件
        Transport transport = session.getTransport("smtp");
        String domain = to.substring(to.indexOf("@") + 1);
        String smtpServer = getSmtpServer(domain, null);
        transport.connect(smtpServer, null, null);
        transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
        transport.close();
    }

    public static String getSmtpServer(String domain, String dnsServer)
            throws Exception {
        DirContext ctx = new InitialDirContext();
        Attributes attrsMx = null;
        if (dnsServer != null) {
            attrsMx = ctx.getAttributes("dns:" + "//" + dnsServer + "/"
                    + domain, new String[] { "MX" });
        } else {
            attrsMx = ctx.getAttributes("dns:" + "/" + domain,
                    new String[] { "MX" });
        }

        String recordMx = (String) attrsMx.get("MX").get();
        String smtpServer = recordMx.substring(recordMx.indexOf(" ") + 1);
        return smtpServer;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值