现在的位置: 首页 > 综合 > 正文

【垃圾菜鸟笔记】java 一个类发送邮件

2018年05月16日 ⁄ 综合 ⁄ 共 3195字 ⁄ 字号 评论关闭

SendMail.java

package xxx.common;

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

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
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 com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;

public class SendMail {
	public static void main(String[] args) {
		
		//配置参数
		Properties props=new Properties();
		props.setProperty("mail.smtp.auth", "true");//是否有身份验证
		props.setProperty("mail.transport.protocol", "smtp");//使用的传输协议
		props.setProperty("mail.smtp.host", "smtp.163.com");//设置SMTP服务器
		props.setProperty("mail.smtp.from", "xxx@163.com");//发送方邮件地址		
												//默认port 是25 这个可以自己设置mail.smtp.port

								
		//连接邮件服务器会话对象,传入参数和用户名密码验证对象,此处用匿名类实现
		Session session=Session.getInstance(props,new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("xxxxx@163.com","xxxxxx");
			}			
		});
		
		//显示调试信息
		session.setDebug(true);
				
		//复杂信息对象
		MimeMessage msg=new MimeMessage(session);
		
		try {			
			//发送方的邮箱地址
			msg.setFrom(new InternetAddress("xxxxx@163.com"));
			//邮件主题
			msg.setSubject("这是一封测试邮件");			
			//接收方的邮箱地址数组,Message.RecipientType.TO是发送方式(TO正常,CC抄送,BCC密件抄送)
			msg.setRecipients(Message.RecipientType.TO, new Address[]{new InternetAddress("xxxx@qq.com")});//在此处传入接收方邮箱地址
			
			//为混合模式的邮件内容对象
			MimeMultipart msgMultipart = new MimeMultipart("mixed");
						
			//内容1:普通HTML文本
			MimeBodyPart body1 = new MimeBodyPart();
			body1.setContent("<font color=red>红色的测试文本</font>","text/html;charset=gbk");
			
			//将内容1加入到邮件内容对象中
			msgMultipart.addBodyPart(body1);
			
			//内容2:一个文件附件
			MimeBodyPart body2 = new MimeBodyPart();
			DataSource ds = new FileDataSource("f:\\20.png");//源文件路径
			DataHandler dh = new DataHandler(ds);//包装文件
			body2.setDataHandler(dh);//设置内容2的文件附件
			body2.setFileName(MimeUtility.encodeText("文件20.png"));//设置附件名称,中文要转码
			
			//将内容2加入到邮件内容对象中
			msgMultipart.addBodyPart(body2);
			
			//设置邮件内容
			msg.setContent(msgMultipart);
			
			//发送邮件
			Transport.send(msg);
			
		} catch (MessagingException e) {			
			e.printStackTrace();
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	}
	

还是有一点问题没有解决的了

在使用qq邮箱为发送方的时候会报这个错误

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

at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
at javax.mail.Service.connect(Service.java:295)
at javax.mail.Service.connect(Service.java:176)
at com.javaMail.entity.MailUtil.sendEmail(MailUtil.java:38)
at com.javaMail.entity.MailUtil.main(MailUtil.java:60)

设置了 port 465之后 提示信息没有报错 或者是我等待的时间太短了,看提示信息有一条这样的

.........(略) isSSL false   卡到这里不继续了

这个是

如何设置POP3/SMTP的SSL加密方式?(腾讯)

http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=369 

做这个的时候还有个小问题,用163都调试成功了 控制台正常输出信息,但是打开qq邮箱收件箱一看  噫? 为啥没有邮件呢 ,然后俺就多执行了几遍,还是没有邮件 

就在执行了n遍以后突然想到了 邮箱是会自动处理垃圾邮件的  打开垃圾箱 测试邮件老老实实的躺在那里

注:以上xxx标示的 皆为个人信息不便透露 嘿嘿

抱歉!评论已关闭.