mail邮件发送添加附件的方法

本文详细介绍了一个Java邮件发送的实战案例,包括Maven项目的搭建、POM文件配置、实体类及工具类的设计等。通过具体代码演示了如何实现邮件的发送功能。

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

引言:mail接口调用学习案例demo,对于其mail接口原理介绍度娘会给你满意的答案,我这就不再赘述,直接上代码讲解

1、新建maven项目


2、POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>MailTest</groupId>
  <artifactId>MailTest</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>MailTest Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
     <jstl.version>1.2</jstl.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
    <dependency>
       <groupId>javax.mail</groupId>
       <artifactId>mail</artifactId>
       <version>1.4.7</version>
    </dependency>
    <!-- jstl jsp标签 -->
     <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>${jstl.version}</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    <!-- servlet  -->
     <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.0.1</version>
          <scope>provided</scope>
     </dependency>
     <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>jstl</artifactId>
         <version>1.1.2</version>
         <scope>provided</scope>
     </dependency>
        
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
        
         <!-- commons jar -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
       	<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>log4j-over-slf4j</artifactId>
			<version>1.6.2</version>
		</dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        
  </dependencies>
  <build>
    <finalName>MailTest</finalName>
  </build>
</project>
3、MailInfo实体类

package com.mail.utils;

import java.util.List;
import java.util.Properties;

/**
 * 邮件信息
 */
public class MailInfo {
    private String mailServerHost; // 发送邮件的服务器的IP
    private String mailServerPort = "25"; // 发送邮件的服务器端口
    private String userName; // 登陆邮件发送服务器的用户名
    private String userPassword; // 登陆邮件发送服务器的密码
    private String fromAddress; // 邮件发送者的地址
    private String toAddress; // 邮件接收者的地址管控
    private String ccAddress; // 邮件抄送者的地址
    private String fromUserName = "邮件测试"; // 邮件发送者的名称,显示在他人邮件的发件人
    private String mailSubject; // 邮件主题
    private String mailContent; // 邮件的文本内容
    private boolean authValidate = true; // 是否需要身份验证
    private Properties properties; // 邮件会话属性

    public MailInfo() {
    }

    public MailInfo(String serverHost, String user, String password, String fromAddress, String title, String content, List<String> receiver, List<String> ccList) {
        this.mailServerHost = serverHost;
        this.userName = user;
        this.userPassword = password;
        this.fromAddress = fromAddress;
        this.toAddress = listToStringFormat(receiver);
        this.ccAddress = ccList == null ? "" : listToStringFormat(ccList);
        this.mailSubject = title;
        this.mailContent = content;
    }

    private synchronized String listToStringFormat(List<String> list) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            if (i == list.size() - 1) {
                stringBuilder.append(list.get(i));
            } else {
                stringBuilder.append(list.get(i)).append(",");
            }
        }
        return stringBuilder.toString();
    }

    public String getMailServerHost() {
        return mailServerHost;
    }

    public void setMailServerHost(String mailServerHost) {
        this.mailServerHost = mailServerHost;
    }

    public String getMailServerPort() {
        return mailServerPort;
    }

    public void setMailServerPort(String mailServerPort) {
        this.mailServerPort = mailServerPort;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public String getFromAddress() {
        return fromAddress;
    }

    public void setFromAddress(String fromAddress) {
        this.fromAddress = fromAddress;
    }

    public String getToAddress() {
        return toAddress;
    }

    public void setToAddress(String toAddress) {
        this.toAddress = toAddress;
    }

    public String getCcAddress() {
        return ccAddress;
    }

    public void setCcAddress(String ccAddress) {
        this.ccAddress = ccAddress;
    }

    public String getMailSubject() {
        return mailSubject;
    }

    public void setMailSubject(String mailSubject) {
        this.mailSubject = mailSubject;
    }

    public String getMailContent() {
        return mailContent;
    }

    public void setMailContent(String mailContent) {
        this.mailContent = mailContent;
    }

    public String getFromUserName() {
        return fromUserName;
    }

    public void setFromUserName(String fromUserName) {
        this.fromUserName = fromUserName;
    }

    public boolean isAuthValidate() {
        return authValidate;
    }

    public void setAuthValidate(boolean authValidate) {
        this.authValidate = authValidate;
    }

    public Properties getProperties() {
        Properties p = new Properties();
        p.put("mail.smtp.host", this.mailServerHost);
        p.put("mail.smtp.port", this.mailServerPort);
        p.put("mail.smtp.auth", authValidate ? "true" : "false");
        p.put("mail.smtp.starttls.enable", "true");
        return p;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }


}

4、MessageSender类

package com.mail.utils;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;


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.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 *发送邮件工具类
 */

public class MessageSender {
    private static final Logger logger = Logger.getLogger(MessageSender.class);

    /**
     *
     * 发送邮件-邮件内容为文本格式
     * @param mailInfo
     * @return
     */
    public static boolean sendMail(MailInfo mailInfo) {
        try {
            Message mailMessage = generateBaseInfo(mailInfo);
            mailMessage.setText(mailInfo.getMailContent());// 设置邮件消息的主要内容
            Transport.send(mailMessage); // 发送邮件
            System.out.println("【 TEXT 邮件发送完毕,成功时间: " + System.currentTimeMillis()+ " 】");
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 邮件内容为html格式
     * @param mailInfo
     * @return
     */
    public static boolean sendHtmlMail(MailInfo mailInfo) {
        try {
            Message mailMessage = generateBaseInfo(mailInfo);
            Multipart mainPart = new MimeMultipart();// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
            BodyPart html = new MimeBodyPart();// 创建一个包含HTML内容的MimeBodyPart
            html.setContent(mailInfo.getMailContent(), "text/html; charset=utf-8");// 设置HTML内容
            mainPart.addBodyPart(html);
            mailMessage.setContent(mainPart);// 将MiniMultipart对象设置为邮件内容
            Transport.send(mailMessage);// 发送邮件
            System.out.println("【 HTML 邮件发送完毕,成功时间: " + System.currentTimeMillis() + " 】");
            System.out.println("send ok!");
            return true;
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 邮件信息安全转换
     * @param mailInfo
     * @return
     * @throws UnsupportedEncodingException
     * @throws MessagingException
     */
    public static Message generateBaseInfo(MailInfo mailInfo) throws UnsupportedEncodingException, MessagingException {
        // 判断是否需要身份认证
        MailAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        // 如果需要身份认证,则创建一个密码验证器
        if (mailInfo.isAuthValidate()) {
            authenticator = new MailAuthenticator(mailInfo.getUserName(),
                    mailInfo.getUserPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        Message mailMessage = null;
        mailMessage = new MimeMessage(sendMailSession); // 根据session创建一个邮件消息
        Address from = new InternetAddress(mailInfo.getFromAddress(), mailInfo.getFromUserName()); // 创建邮件发送者地址
        mailMessage.setFrom(from); // 设置邮件消息的发送者
        if (mailInfo.getToAddress() != null && mailInfo.getToAddress().contains(",")) {
            mailMessage.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailInfo.getToAddress()));// Message.RecipientType.TO属性表示接收者的类型为TO
        } else {
            Address to = new InternetAddress(mailInfo.getToAddress()); // 创建邮件的接收者地址,并设置到邮件消息中
            mailMessage.setRecipient(Message.RecipientType.TO, to);// Message.RecipientType.TO属性表示接收者的类型为TO
        }
        if (StringUtils.isNotBlank(mailInfo.getCcAddress())) {
            if (mailInfo.getCcAddress().contains(",")) {
                mailMessage.setRecipients(Message.RecipientType.CC, InternetAddress.parse(mailInfo.getCcAddress())); // Message.RecipientType.CC属性表示接收者的类型为CC
            } else {
                Address cc = new InternetAddress(mailInfo.getCcAddress()); // 创建邮件的抄送者地址,并设置到邮件消息中
                mailMessage.setRecipient(Message.RecipientType.CC, cc); // Message.RecipientType.CC属性表示接收者的类型为CC
            }
        }
        mailMessage.setSubject(mailInfo.getMailSubject());// 设置邮件消息的主题
        mailMessage.setSentDate(new Date());// 设置邮件消息发送的时间
        return mailMessage;
    }

}

5、MailAuthenticator类
package com.mail.utils;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * 邮件安全认证
 */
public class MailAuthenticator extends Authenticator {
    String userName;
    String userPassword;

    public MailAuthenticator() {
        super();
    }

    public MailAuthenticator(String user, String pwd) {
        super();
        userName = user;
        userPassword = pwd;
    }

    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, userPassword);
    }

}


5、MailDemo类  使用你自己的邮件用户

package com.mail.test;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.junit.Test;

import com.mail.utils.MailInfo;
import com.mail.utils.MessageSender;
import com.mail.utils.MessageSenderTask;

public class MailDemo {
    
 
	@Test
	public void mail(){
		
		String serverHost="smtp.189.cn";
		String user="";  //用户名
		String password="";  //密码
		String fromAddress="";  //邮件地址
		String title="邮件测试Demo";
		String content="邮件测试成功";
		List<String> receiver=new ArrayList<String>();		
		receiver.add("840267340@qq.com");
		List<String> ccReceiver=new ArrayList<String>();
		
		MailInfo mailInfo = new MailInfo(serverHost,user,password,fromAddress,title,content,receiver,ccReceiver);
		
		MessageSenderTask.sendMail(mailInfo);
	}
	
	
}

运行Test即可;


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伏特加的滋味

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值