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

引言: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即可;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,以下是 Java 实现带附件邮件发送功能的步骤: 1. 导入 JavaMail 和 Java Activation Framework 库。 2. 创建一个 Session 对象,设置邮箱服务器的相关信息,包括主机名、端口号、是否开启 SSL 等。这些信息可以从你的邮箱提供商那里获取。 3. 创建一个 MimeMessage 对象,设置邮件的基本信息,包括发件人、收件人、主题等。 4. 创建一个 MimeMultipart 对象,用于存放邮件正文和附件。 5. 创建一个 MimeBodyPart 对象,设置邮件正文的内容和格式。 6. 创建一个 MimeBodyPart 对象,设置附件的内容和格式。 7. 将邮件正文和附件添加到 MimeMultipart 对象中。 8. 将 MimeMultipart 对象设置为 MimeMessage 对象的内容。 9. 发送邮件。 以下是一个简单的示例代码: ```java import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class SendEmailWithAttachment { public static void main(String[] args) throws Exception { // 邮箱服务器信息 String host = "smtp.example.com"; String username = "your_username"; String password = "your_password"; int port = 587; boolean ssl = false; // 收件人信息 String to = "[email protected]"; // 创建 Session 对象 Properties props = new Properties(); props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", port); props.put("mail.smtp.starttls.enable", ssl ? "true" : "false"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); // 创建邮件对象 MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("邮件主题"); // 创建邮件正文 MimeBodyPart textPart = new MimeBodyPart(); textPart.setText("邮件正文"); // 创建附件 MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile("path/to/attachment"); // 创建混合内容 MimeMultipart multipart = new MimeMultipart(); multipart.addBodyPart(textPart); multipart.addBodyPart(attachmentPart); // 设置邮件内容 message.setContent(multipart); // 发送邮件 Transport.send(message); } } ``` 其中,`host`、`username`、`password`、`port` 和 `ssl` 为你的邮箱服务器相关信息,`to` 为收件人邮箱地址,`path/to/attachment` 为附件的路径。你需要将这些信息替换为自己的信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伏特加的滋味

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

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

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

打赏作者

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

抵扣说明:

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

余额充值