使用JAVA发送带附件的邮件

首先定义我们的邮箱类



/**
 * 邮件类
 * 
 * @author yanxh
 *
 */
public class Mail {

	/**
	 * smtp服务器
	 */
	private String smtpHost = "";
	/**
	 * smtp服务器是否授权 true表示授权
	 */
	private String smtpAuth = "";
	/**
	 * smtp服务器监听端口
	 */
	private String smtpPort = "";

	/**
	 * 发件人地址
	 */
	private String sender = "";

	/**
	 * 收件人地址
	 */
	private String receiver = "";

	/**
	 * 邮件文本内容
	 */
	private String text = "";

	/**
	 * 附件地址
	 */
	private String attachmentUrl = "";

	/**
	 * 附件名称
	 */
	private String attachmentName = "";

	/**
	 * 用户名
	 */
	private String username = "";

	/**
	 * 密码(授权码)
	 */
	private String password = "";

	/**
	 * 邮件标题
	 */
	private String title = "";

	public String getSmtpHost() {
		return smtpHost;
	}

	public void setSmtpHost(String smtpHost) {
		this.smtpHost = smtpHost;
	}

	public String getSmtpAuth() {
		return smtpAuth;
	}

	public void setSmtpAuth(String smtpAuth) {
		this.smtpAuth = smtpAuth;
	}

	public String getSmtpPort() {
		return smtpPort;
	}

	public void setSmtpPort(String smtpPort) {
		this.smtpPort = smtpPort;
	}

	public String getSender() {
		return sender;
	}

	public void setSender(String sender) {
		this.sender = sender;
	}

	public String getReceiver() {
		return receiver;
	}

	public void setReceiver(String receiver) {
		this.receiver = receiver;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public String getAttachmentUrl() {
		return attachmentUrl;
	}

	public void setAttachmentUrl(String attachmentUrl) {
		this.attachmentUrl = attachmentUrl;
	}

	public String getAttachmentName() {
		return attachmentName;
	}

	public void setAttachmentName(String attachmentName) {
		this.attachmentName = attachmentName;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

}

 其次是邮箱工具类



import java.util.Properties;

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

/**
 * 邮件工具类
 * 
 * @author yanxh
 *
 */
public class MailUtils {

	/**
	 * 后加的防止题目过长并且进行全局定义
	 */
	static {
		System.setProperty("mail.mime.splitlongparameters", "false");
		System.setProperty("mail.mime.charset", "UTF-8");
	}

	public static void send(Mail mail) {

		Properties props = new Properties();
		// 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
		props.put("mail.smtp.host", mail.getSmtpHost());
		// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证
		props.put("mail.smtp.auth", mail.getSmtpAuth());
		props.put("mail.smtp.port", mail.getSmtpPort());
		props.put("mail.smtp.ssl.enable", true);
		// 用刚刚设置好的props对象构建一个session
		Session session = Session.getDefaultInstance(props);

		// 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
		// 用(你可以在控制台(console)上看到发送邮件的过程)
		session.setDebug(true);

		// 用session为参数定义消息对象
		MimeMessage message = new MimeMessage(session);
		try {
			// 加载发件人地址
			message.setFrom(new InternetAddress(mail.getSender()));
			// 加载收件人地址
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(mail.getReceiver()));
			// 加载标题
			message.setSubject(mail.getTitle());

			// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
			Multipart multipart = new MimeMultipart();

			// 设置邮件的文本内容
			BodyPart contentPart = new MimeBodyPart();
			contentPart.setText(mail.getText());
			multipart.addBodyPart(contentPart);
			// 添加附件
			BodyPart messageBodyPart = new MimeBodyPart();
			DataSource source = new FileDataSource(mail.getAttachmentUrl());
			// 添加附件的内容
			messageBodyPart.setDataHandler(new DataHandler(source));
			// 添加附件的标题
			messageBodyPart.setFileName(MimeUtility.encodeText(mail.getAttachmentName()));
			multipart.addBodyPart(messageBodyPart);

			// 将multipart对象放到message中
			message.setContent(multipart);
			// 保存邮件
			message.saveChanges();
			// 发送邮件
			Transport transport = session.getTransport("smtp");
			// 连接服务器的邮箱
			transport.connect(mail.getSmtpHost(), mail.getUsername(), mail.getPassword());
			// 把邮件发送出去
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

开始测试 

// 发送邮件
Mail mail = new Mail();
mail.setSender("xxxxxx@qq.com"); // 发件人邮箱
mail.setReceiver("qwwwwww@163.com"); // 收件人邮箱
mail.setTitle("邮件标题"); // 邮件标题
mail.setAttachmentUrl("D:/111/22.pdf"); // 附件的物理地址
mail.setAttachmentName("附件名称"); // 附件名称
mail.setSmtpHost("smtp.exmail.qq.com"); // 邮箱服务器
mail.setUsername("xxxxxx@qq.com"); // 发件人邮箱用户名,一般就是发件人邮箱
mail.setPassword("wqweqwe"); // 发件人邮箱的授权码
MailUtils.send(mail);

 可能遇到的问题

发送邮件附件变成.bin文件

邮件附件名称乱码

常用邮箱服务器及其端口整理

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值