java实现邮件带附件发送功能

需要引用的pom

    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.5.4</version>
    </dependency>

工具类代码

import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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 javax.mail.internet.MimeUtility;

import com.alibaba.druid.util.StringUtils;
import com.sun.mail.util.MailSSLSocketFactory;
/**
 * 发送邮件工具类
 * 
 * @author tp
 *
 */
public class SendMailAcceUtils {

    /**
     * 发送带附件的邮件
     * 
     * @param receive
     *            收件人
     * @param subject
     *            邮件主题
     * @param msg
     *            邮件内容
     * @param filename
     *            附件地址
     * @return
     * @throws GeneralSecurityException
     */
    public static boolean sendMail(String receive, String subject, String msg, String filename)
            throws GeneralSecurityException {
        if (StringUtils.isEmpty(receive)) {
            return false;
        }

        // 发件人电子邮箱
        final String from = "123456789@163.com";
        // 发件人电子邮箱密码
        final String pass = "123456";

        // 指定发送邮件的主机为 smtp.qq.com
        String host = "smtp.163.com"; // 邮件服务器

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

        properties.put("mail.smtp.auth", "true");
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() { // qq邮箱服务器账户、第三方登录授权码
                return new PasswordAuthentication(from, pass); // 发件人邮件用户名、密码
            }
        });

        try {
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(receive));

            // Set Subject: 主题文字
            message.setSubject(subject);

            // 创建消息部分
            BodyPart messageBodyPart = new MimeBodyPart();

            // 消息
            messageBodyPart.setText(msg);

            // 创建多重消息
            Multipart multipart = new MimeMultipart();

            // 设置文本消息部分
            multipart.addBodyPart(messageBodyPart);

            // 附件部分
            messageBodyPart = new MimeBodyPart();
            // 设置要发送附件的文件路径
            DataSource source = new FileDataSource(filename);
            messageBodyPart.setDataHandler(new DataHandler(source));

            // messageBodyPart.setFileName(filename);
            // 处理附件名称中文(附带文件路径)乱码问题
            messageBodyPart.setFileName(MimeUtility.encodeText(filename));
            multipart.addBodyPart(messageBodyPart);

            // 发送完整消息
            message.setContent(multipart);

            // 发送消息
            Transport.send(message);
            // System.out.println("Sent message successfully....");
            return true;
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return false;
    }

测试代码:

public static void main(String[] args) {
    String receive="616865598@qq.com";
    String subject ="邮件主题";
    String msg ="邮件内容";
    String filename ="E:\\a.excel";
    try {
        SendMailAcceUtils.sendMail(receive, subject, msg, filename);
    } catch (GeneralSecurityException e) {
        e.printStackTrace();
    }
}
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
好的,以下是 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` 为附件的路径。你需要将这些信息替换为自己的信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值