java 简单邮件发送 & 常遇问题总结

本文分享了使用Java实现邮件发送过程中的遇到的问题及解决方案,包括不同邮箱服务器配置的区别,最终通过163邮箱成功实现了邮件的发送,并附上了完整的代码示例。

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

昨天开始写java邮件发送,先是在网上找了几段代码,拷下来直接测试,用的是QQ邮箱,发现会报错。

A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28

点进去发现没有什么可用信息。在网上找了一下方法,说是把 “smtp.qq.com” 改为: “smtp.exmail.qq.com” 就可以,我也看到回复了,好多人都可以,我就想着试试,结果又报错。

521 Error: Invalid domain name, please use smtp.qq.com. More information at http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=371

看错误信息,是让改回“smtp.qq.com”。。。这我就郁闷了,后面的网址也没有什么可用的信息。

看QQ邮箱什么需要SSL连接,什么要在邮箱设置SMTP,端口465,587等,全试了,没用。

最后,终于放弃了QQ邮箱,改用多年没使用的163邮箱,还得找回密码啊。

试的结果就是,一次成功。163就是好用。在这建议大家还在纠结QQ邮箱的赶紧改投其他邮箱吧,貌似QQ邮箱需要ssl连接,163可以不用。

在这我附上我自己写的代码,供大家参考,有不足的地方,望大家指正。

自己封装的类:

package com.util.mail;

import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 简单邮件发送
 * @author zhangzhuo
 * @version 1.0 2014/05/25
 */
public class Mail {
	/**
	 * @param username  用户名,一般都是邮箱账户
	 * @Param password  密码
	 * @param fromAddress 发件人
	 * @param toAddress 收件人,可群发
	 * @param mailServerHost 邮箱服务器ip
	 * @param mailServerPort 端口
	 * @param subject   邮件标题
	 * @param content   邮件内容
	 */
	private String username;
	private String password;
	private String fromAddress;
	private String [] toAddress;
	private String mailServerHost;
	private Integer mailServerPort;
	private String subject;
	private String content;
	
	//配置
	private Properties props = new Properties();
	//环境
	private Session session;
	//发送器
	private Transport transport;
	//邮件
	private Message msg;
	
	/**
	 * 配置信息
	 */
	private void setInfo(){
		//登入邮箱服务器是需要验证的
		props.setProperty("mail.smtp.auth", "true");
		//设置协议
		props.setProperty("mail.transport.protocol", "smtp");
	}
	
	/**
	 * 设置信件信息
	 */
	private void setMessage(){
		//环境信息
		session = Session.getDefaultInstance(this.props);
		//创建邮件信息
		msg = new MimeMessage(session);
		try {
			//设置邮件标题
			msg.setSubject(this.subject);
			//设置邮件内容
			msg.setText(content);
			//设置邮件发信人
			msg.setFrom(new InternetAddress(this.username));
		} catch (AddressException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 得到收件人的一个数组,满足群发
	 * @return Address[]  收件人数组
	 */
	private Address [] getAddress() {
		Address [] address = new Address[this.toAddress.length];
		for(int i = 0; i < this.toAddress.length;i++){
			try {
				address[i] = new InternetAddress(this.toAddress[i]);
			} catch (AddressException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return address;
	}
	
	/**
	 * 给用户只暴露这个方法
	 * 通过这个方法,对信息进行设置,然后再发送
	 */
	public void send(){
		setInfo();
		setMessage();
		try {
			//创建一个发送器transport用来发送邮件内容
			transport = session.getTransport();
			transport.connect(this.mailServerHost, this.mailServerPort, this.username, this.password);
			//后面的邮件是受件人的邮箱,可以指定多个
			transport.sendMessage(this.msg, this.getAddress());	
			transport.close();
		} catch (NoSuchProviderException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	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 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 getMailServerHost() {
		return mailServerHost;
	}

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

	public Integer getMailServerPort() {
		return mailServerPort;
	}

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

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
}
测试用的类:

package com.util.test;

import com.util.mail.Mail;

public class test {

	public static void main(String[] args) {
		 Mail mail = new Mail();
		 
		 //设置服务器ip,端口
	     mail.setMailServerHost("smtp.163.com");    
	     mail.setMailServerPort(25);    
	     
	     //设置登陆信息
	     mail.setUsername("*******@163.com");    
	     mail.setPassword("******");
	     
	     //设置发件人,收件人
	     mail.setFromAddress("**********@163.com");    
	     mail.setToAddress(new String [] {"**********@qq.com","**********@163.com"});   
	     
	     //设置标题,内容
	     mail.setSubject("test");    
	     mail.setContent("success");
	     
	     //发送
	     mail.send();
	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值