java实现新浪邮箱的发送

 jdk

        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.1</version>
        </dependency>

package com.airport;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendEmail {
    public static void main(String[] args) throws MessagingException {

        // 设置SMTP服务器地址、端口号等信息
        String host = "smtp.sina.com";
        int port = 465;

        Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");// 连接协议
        props.put("mail.smtp.host", host);// 主机名,必须要,也可以使用smtp.sina.com.cn
        props.put("mail.smtp.port", port);// 端口号,写不写无所谓,不确定的情况下,可以不写
        props.put("mail.smtp.auth", "true");// 是否鉴权,必须要
        props.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接,一般都使用
        Session session = Session.getInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                //发送者的账号及IMAP/SMTP秘钥
                return new PasswordAuthentication("@sina.com", "5b8ba7eab20afe14");
            }
        });
        MimeMessage message = new MimeMessage(session);
        //发送者邮箱
       message.setFrom(new InternetAddress("@sina.com"));
       //接收者邮箱
       message.addRecipient(Message.RecipientType.TO, new InternetAddress("@qq.com"));
        message.setSubject("Hello from Java!");
        message.setText("This is a test email sent using Java.");

        Transport.send(message);

        System.out.println("Email sent successfully!");
    }
}

plus版本

package com.airport;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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 java.util.Properties;

/**
 * 发送新浪邮件工具类,可发送纯文本、富文本、附件格式的邮件
 * Created by wolffy on 2019/4/10
 */
@Slf4j
public class SinaMailUtil {

    /**
     * 发送者邮箱
     */
    private static final String sender = "发送者邮箱";

    /**
     * 邮箱密码
     */
    private static final String password = "邮箱密码";

    private static Properties properties() {
        Properties properties = new Properties();
        properties.put("mail.transport.protocol", "smtp");// 连接协议
        properties.put("mail.smtp.host", "smtp.sina.com");// 主机名,必须要,也可以使用smtp.sina.com.cn
        properties.put("mail.smtp.port", 465);// 端口号,写不写无所谓,不确定的情况下,可以不写
        properties.put("mail.smtp.auth", "true");// 是否鉴权,必须要
        properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接,一般都使用
        properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息,其中就包含了port
        return properties;
    }

    /**
     * 发送纯文本类型的新浪邮件
     *
     * @param receiver 接收者邮箱
     * @param subject  邮件标题
     * @param content  邮件内容
     */
    public static void sendTextEmail(String receiver, String subject, String content) {
        try {
            // 得到会话对象
            Session session = Session.getInstance(properties());
            // 获取邮件对象
            Message message = new MimeMessage(session);
            // 设置发件人邮箱地址
            message.setFrom(new InternetAddress(sender));
            // 设置收件人邮箱地址
            // 多个收件人
            // message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("xxx@sina.com"), new InternetAddress("xxx@sina.com")});
            // 一个收件人
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiver));// 发送
            // message.setRecipient(Message.RecipientType.CC, new InternetAddress(receiver));// 抄送
            // message.setRecipient(Message.RecipientType.BCC, new InternetAddress(receiver));// 暗送
            // 设置邮件标题
            message.setSubject(subject);
            // 设置邮件内容
            message.setText(content);

            // setText等同于如下写法,将mimeType封装起来了,提供出一个简单的API
            // MimeBodyPart textPart = new MimeBodyPart();
            // textPart.setContent(content, "text/plain;charset=UTF-8");
            // MimeMultipart multipart = new MimeMultipart();
            // multipart.addBodyPart(textPart);
            // message.setContent(multipart);

            // 将创建好的邮件写入到磁盘盘以文件的形式进行保存
            // message.saveChanges();
            // message.writeTo(new FileOutputStream("/Users/felix/Desktop/sina_email.eml"));

            // 得到传输对象
            Transport transport = session.getTransport();
            // 连接自己的邮箱账户
            transport.connect(sender, password);// 密码为邮箱登录密码
            // 发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭连接
            transport.close();
        } catch (MessagingException e) {
            log.error("发送新浪邮件失败:{}", ExceptionUtils.getStackTrace(e));
        }
    }

    /**
     * 发送富文本类型的新浪邮件
     *
     * @param receiver 接收者邮箱
     * @param subject  邮件标题
     * @param content  邮件内容,一段html
     */
    public static void sendRichEmail(String receiver, String subject, String content) {
        try {
            // 得到会话对象
            Session session = Session.getInstance(properties());
            // 获取邮件对象
            Message message = new MimeMessage(session);
            // 设置发件人邮箱地址
            message.setFrom(new InternetAddress(sender));
            // 设置收件人邮箱地址
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiver));
            // 设置邮件标题
            message.setSubject(subject);
            // 设置邮件内容
            MimeMultipart multipart = new MimeMultipart();
            message.setContent(multipart);
            // 准备正文
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setContent(content, "text/html;charset=UTF-8");// 指定文本格式为html
            multipart.addBodyPart(textPart);
            // 得到传输对象
            Transport transport = session.getTransport();
            // 连接自己的邮箱账户
            transport.connect(sender, password);// 密码为邮箱登录密码
            // 发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭连接
            transport.close();
        } catch (MessagingException e) {
            log.error("发送新浪邮件失败:{}", ExceptionUtils.getStackTrace(e));
        }
    }

    /**
     * 发送带图片的新浪邮件,此种方式需要对文本内容详细规划,不能直接拷贝一段html来发送(本质上来说还是发送附件:sendFileEmail(),附件就是图片,只不过图片不以附件的方式展示出来),
     * 如果不想要上传那图片,只是想引用一下其他地方(比如OSS)的图片,可使用sendRichEmail()方法,在html文本中使用img标签进行图片引入
     * <p>
     * 具体表现为:
     * <p>
     * 文本中用到的图片,都需要以附件的方式上传到服务器,但是并不以附件的方式展示出来,而是需要指定一个唯一的ContentID,然后直接在文本中使用<img src='cid:图片名'>进行引用
     *
     * @param receiver 接收者邮箱
     * @param subject  邮件标题
     * @param content  邮件内容(富文本),尽量包含图片在内
     * @param imgPath  图片路径,会以Base64的形式上传到邮箱,多张可以改变方法参数,用list或者字符串解析,然后循环指定ContentID再在文本中引用
     */
    public static void sendImgEmail(String receiver, String subject, String content, String imgPath) {
        try {
            // 得到会话对象
            Session session = Session.getInstance(properties());
            // 获取邮件对象
            Message message = new MimeMessage(session);
            // 设置发件人邮箱地址
            message.setFrom(new InternetAddress(sender));
            // 设置收件人邮箱地址
            // 多个收件人
            // message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("xxx@sina.com"), new InternetAddress("xxx@sina.com")});
            // 一个收件人
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiver));
            // 设置邮件标题
            message.setSubject(subject);
            // 设置邮件内容
            MimeMultipart multipart = new MimeMultipart();
            message.setContent(multipart);

            // 准备正文
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setContent(content, "text/html;charset=UTF-8");// 指定文本格式为html
            multipart.addBodyPart(textPart);

            // 准备图片数据,必须将图片传上去,才可以在正文中访问,说实话,cid一一对应的写法真麻烦
            // 如果是网络图片,可以直接在富文本中写好路径,这样就无需上传了,见sendRichEmail()方法
            // 单张图片
            MimeBodyPart imagePart = new MimeBodyPart();
            DataHandler handler = new DataHandler(new FileDataSource(imgPath));
            imagePart.setDataHandler(handler);
            // 取个别名,在内容中引用,引用格式:<img src='cid:图片名字'>
            // 图片上传了未引用,或者引用的时候别把名字写错了,这两种情况会形成附件形式的邮件,而且附件还是未转码的格式(.bin结尾)
            imagePart.setContentID(handler.getName());
            // 多张图片
            // for (int i = 0; i < 10; i++) {
            //     MimeBodyPart imagePart = new MimeBodyPart();
            //     DataHandler handler = new DataHandler(new FileDataSource("/Users/felix/Desktop/xxx.jpg"));
            //     imagePart.setDataHandler(handler);
            //     imagePart.setContentID("xxx" + i + ".jpg");// 取个别名,在内容中引用
            // }
            multipart.addBodyPart(imagePart);
            // 得到传输对象
            Transport transport = session.getTransport();
            // 连接自己的邮箱账户
            transport.connect(sender, password);// 密码为邮箱登录密码
            // 发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭连接
            transport.close();
        } catch (MessagingException e) {
            log.error("发送新浪邮件失败:{}", ExceptionUtils.getStackTrace(e));
        }
    }

    /**
     * 发送带附件的新浪邮件
     *
     * @param receiver 接收者邮箱
     * @param subject  邮件标题
     * @param content  邮件内容
     * @param filePath 附件路径,会以Base64的形式上传到邮箱(多个附件需要改写此方法,filePath需要传递多个进来)
     */
    public static void sendFileEmail(String receiver, String subject, String content, String filePath) {
        try {
            // 得到会话对象
            Session session = Session.getInstance(properties());
            // 获取邮件对象
            Message message = new MimeMessage(session);
            // 设置发件人邮箱地址
            message.setFrom(new InternetAddress(sender));
            // 设置收件人邮箱地址
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiver));
            // 设置邮件标题
            message.setSubject(subject);
            // 设置邮件内容
            MimeMultipart multipart = new MimeMultipart();
            message.setContent(multipart);
            // 准备正文
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setContent(content, "text/html;charset=UTF-8");// 指定文本格式为html
            multipart.addBodyPart(textPart);
            // 单个附件
            MimeBodyPart imagePart = new MimeBodyPart();
            DataHandler handler = new DataHandler(new FileDataSource(filePath));
            imagePart.setDataHandler(handler);
            imagePart.setFileName(handler.getName());// 注意这里:不再需要setContentId了
            multipart.addBodyPart(imagePart);
            // 得到传输对象
            Transport transport = session.getTransport();
            // 连接自己的邮箱账户
            transport.connect(sender, password);// 密码邮箱登录密码
            // 发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭连接
            transport.close();
        } catch (MessagingException e) {
            log.error("发送新浪邮件失败:{}", ExceptionUtils.getStackTrace(e));
        }
    }

    public static void main(String[] args) {
        sendTextEmail("111111111@sina.com", "aaa", "ccccc");

    }
}

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 Java 发送电子邮件,你需要使用 JavaMail API。以下是一个简单的示例代码,用于发送电子邮件: ```java import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class SendEmail { public static void main(String[] args) { final String username = "你的邮箱地址"; final String password = "你的邮箱密码"; String recipientEmail = "收件人邮箱地址"; Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail)); message.setSubject("测试邮件"); message.setText("你好,这是一封测试邮件。"); Transport.send(message); System.out.println("邮件发送成功!"); } catch (MessagingException e) { System.out.println("邮件发送失败!"); throw new RuntimeException(e); } } } ``` 在上述代码中,我们首先定义了发送邮件所需的参数,包括发件人邮箱地址、发件人邮箱密码、收件人邮箱地址、SMTP 服务器地址和端口等。 然后,我们通过 JavaMail API 创建了一个会话对象,并使用 SMTP 认证机制进行身份验证。在发送邮件之前,我们创建了一个 MimeMessage 对象,并设置了邮件主题、内容和收件人地址等信息。最后,我们通过 Transport 类的 send() 方法发送邮件。 如果邮件发送成功,控制台将输出 "邮件发送成功!",如果邮件发送失败,则输出 "邮件发送失败!"。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值