通过java代码发送邮件

准备工作;发送方开通邮件服务

在设置>>账户 中找到下图POP3/IMAP/SMTP设置,点击要使用的服务,点击开启,会让你发送一个短信,发送后会给你一个16位的密码,这个密码是在下方代码中要使用到的(其他的邮箱服务如163邮箱,126邮箱等也是同样有该设置的.)
在这里插入图片描述
在这里插入图片描述
上方发送短信后,点击下我已发送按钮,会弹出一个含有密码的提示框,一定要记住该密码.

运行java发送邮件代码

下方代码修改下包名,发送方邮箱地址及密码,以及测试的图片和地址即可运行

package jpgk.text.demo;

import com.jpgk.common.utils.StringUtils;
import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.File;
import java.security.GeneralSecurityException;
import java.util.Properties;

/**
 * 通过服务器地址向收件人发送邮件,不同邮箱服务器之间也可发送
 * 发送方:
 * 1.开启POP3/SMTP/IMAP中要使用的服务,可以在邮箱设置中找到,开启后会有服务密码
 * 2.确定服务器地址(地址一般是pop.163.com,smtp.163.com,smtp.qq.com等)
 * 3.确定服务器类型,类型一般是服务器地址点号的前几位
 */
public class JavaEmailUtils {
    private static final String MAILHOST = "smtp.qq.com";//邮件服务器地址
    private static final String MAILTRANSPORTPROTOCOL = "smtp";//邮件服务器类型
    private static final String MAILSMTPAUTH = "true";//是否校验
    private static final String MAILSMTPSSLENABLE = "true";//邮件是否设置SSL加密
    private static final String USERNAME = "******@qq.com";//开通邮件服务的用户
    private static final String PASSWORD = "*******";//开通邮件服务的用户密码,16位
    private static final String TEXTTYPE = "text/html;charset=UTF-8";//发送文本邮件内容格式


    /**
     * 发送邮件
     *
     * @param receiverEmail 接收方邮件地址
     * @param mailTitle     邮件主题
     * @param content       邮件内容
     * @param imagePath     邮件正文中的图片路径,图片路径可传可不传
     * @param filePath      邮件中的附件路径,附件路径可传可不传
     */
    public static void sendEmail(String receiverEmail, String mailTitle, String content, String imagePath, String filePath) {
        //获取配置信息Properties对象
        Properties properties = getProperties();
        //创建一个session对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(USERNAME, PASSWORD);
            }
        });
        //session.setDebug(true);//开启debug模式
        //获取连接对象
        Transport transport;
        try {
            transport = session.getTransport();
            //连接服务器,参数:邮件服务器,服务器用户,用户服务密码
            transport.connect("smtp.qq.com", USERNAME, PASSWORD);
            MimeMessage mimeMessage = new MimeMessage(session); //消息的固定信息
            mimeMessage.setFrom(new InternetAddress(USERNAME));//发件人
            mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmail));//收件人
            mimeMessage.setSubject(mailTitle);//邮件标题
            //组装消息内容
            mimeMessage = setEmailBody(session, receiverEmail, mailTitle, content, imagePath, filePath);

            transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());//发送邮件
            transport.close();//关闭连接
        } catch (NoSuchProviderException e) {
            System.err.println("没有获取到transport");
            e.printStackTrace();
        } catch (MessagingException e) {
            System.err.println("发送邮件异常");
            e.printStackTrace();
        }
    }

    /**
     * 获取Properties对象
     *
     * @return
     */
    public static Properties getProperties() {
        //创建一个配置文件并保存
        Properties properties = new Properties();
        properties.setProperty("mail.host", MAILHOST);
        properties.setProperty("mail.transport.protocol", MAILTRANSPORTPROTOCOL);
        properties.setProperty("mail.smtp.auth", MAILSMTPAUTH);
        //设置SSL加密
        MailSSLSocketFactory socketFactory;
        try {
            socketFactory = new MailSSLSocketFactory();
            socketFactory.setTrustAllHosts(true);
            properties.put("mail.smtp.ssl.enable", MAILSMTPSSLENABLE);
            properties.put("mail.smtp.ssl.socketFactory", socketFactory);
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        }
        return properties;
    }

    /**
     * 设置发送邮件的主体内容
     *
     * @param session
     * @param receiverEmail 接收方邮件地址
     * @param mailTitle     邮件主题
     * @param content       邮件内容
     * @param imagePath     邮件正文中的图片
     * @param filePath      邮件中的附件
     * @return
     * @throws MessagingException
     */
    public static MimeMessage setEmailBody(Session session, String receiverEmail, String mailTitle, String content, String imagePath, String filePath) throws MessagingException {
        MimeMessage mimeMessage = new MimeMessage(session); //消息的固定信息
        mimeMessage.setFrom(new InternetAddress(USERNAME));//发件人
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmail));//收件人
        mimeMessage.setSubject(mailTitle);//邮件标题

        MimeMultipart mimeMultipart = new MimeMultipart();//正文部分,包含文本和图片
        MimeBodyPart text = new MimeBodyPart();//正文文本
        if (!StringUtils.isEmpty(imagePath)) {
            MimeBodyPart image = new MimeBodyPart();
            DataHandler handler = new DataHandler(new FileDataSource(imagePath));
            image.setDataHandler(handler);
            String imageId = String.valueOf(System.currentTimeMillis());
            image.setContentID(imageId); //设置图片id
            text.setContent(content + "<img src='cid:" + imageId + "'>", TEXTTYPE);
            mimeMultipart.addBodyPart(image);//正文图片
        } else {
            text.setContent(content, TEXTTYPE);
        }
        mimeMultipart.addBodyPart(text);
        mimeMultipart.setSubType("related");//文本和图片内嵌成功
        MimeBodyPart contentText = new MimeBodyPart();
        contentText.setContent(mimeMultipart);//设置正文内容

        MimeMultipart allFile = new MimeMultipart();//邮件主体,包含正文和附件
        if (!StringUtils.isEmpty(filePath)) {
            MimeBodyPart appendix = new MimeBodyPart();
            appendix.setDataHandler(new DataHandler(new FileDataSource(filePath)));
            appendix.setFileName(new File(filePath).getName());
            allFile.addBodyPart(appendix);//附件
        }
        allFile.addBodyPart(contentText);//正文
        allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed

        //放到Message消息中
        mimeMessage.setContent(allFile);
        mimeMessage.saveChanges();//保存修改
        return mimeMessage;
    }

    /**
     * 测试发送邮件
     *
     * @param args
     */
    public static void main(String[] args) {
        sendEmail("123456@163.com", "测试", "测试发送邮件", "D:\\test.png", "D:\\test.xls");
    }
}

上述代码已经简单封装成工具类,有需要优化的大神可以继续进行优化.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值