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标示的 皆为个人信息不便透露 嘿嘿