javamail的Demo,使用发送邮件
2013-10-27 11:12
330 查看
注:本文参照孙卫琴编写的<<网络编程详解>>
一、初始环境
1、使用两个jar包,mail.jar和activation.jar两个包。
2、使用QQ邮箱做实验。
二、实例Demo
1、发送者信息类,包含用户名、密码、邮箱服务器和端口
2、发送信息的载体类
3、发送邮箱的类
4、测试类
三、解释
1、本Demo只是简单的发送文本方式的邮件。
2、在初次写该代码的时候常见的错误是:
(1)、com.sun.mail.smtp.SMTPSendFailedException: 503 Error: need EHLO and AUTH first !
是因为在发送邮件的时候没有进行用户验证设置:prop.put("mail.smtp.auth", "true");
(2)、Session.getDefaultInstance(mailUserInfo.getProp(),mailUserInfo);获取session的时候
mailUserInfo对象的类要继承Authenticator并要重写getPasswordAuthentication方法。
(3)、messageInfo.setSendFrom(sfsdfs@qq.com);设置的内容要和登入的用户名一至,一定要加后缀,但是登入名可以不加后缀。
3、Message类要进行了解。
一、初始环境
1、使用两个jar包,mail.jar和activation.jar两个包。
2、使用QQ邮箱做实验。
二、实例Demo
1、发送者信息类,包含用户名、密码、邮箱服务器和端口
package com.yezi.mydemo; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * 发件人信息,继承Authenticator重写getPasswordAuthentication, * 可以进行验证邮箱的密码和用户名 */ public class MailUserInfo extends Authenticator{ private String user; //用户名 private String password; //密码 private String mailServerHost; private int mailServerPort; public MailUserInfo(String user, String password, String mailServerHost, int mailServerPort) { this.user = user; this.password = password; this.mailServerHost = mailServerHost; this.mailServerPort = mailServerPort; } /**邮件的默认配置,注意*/ public Properties getProp(){ Properties prop = new Properties(); prop.put("mail.smtp.host", this.mailServerHost); prop.put("mail.smtp.port", this.mailServerPort); prop.put("mail.transport.protocol","stmp"); prop.put("mail.store.protocol","imap"); prop.put("mail.imap.class","com.sun.mail.imap.IMAPStore"); prop.put("mail.smtp.class","com.sun.mail.smtp.SMTPTransport"); //com.sun.mail.smtp.SMTPSendFailedException: 503 Error: need EHLO and AUTH first ! //如果不配置下面这段话 prop.put("mail.smtp.auth", "true"); return prop; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user,password); } }
2、发送信息的载体类
package com.yezi.mydemo; import javax.mail.Message.RecipientType; /**邮件信息*/ public class MessageInfo { /**发送人,要和登入的邮箱的用户名一致*/ private String sendFrom; private String sendTo; private RecipientType recipientType; //发送cc to bcc /**主题*/ private String subject; /**发送的内容*/ private String sendContext; public String getSendFrom() { return sendFrom; } public RecipientType getRecipientType() { return recipientType; } public void setRecipientType(RecipientType recipientType) { this.recipientType = recipientType; } public void setSendFrom(String sendFrom) { this.sendFrom = sendFrom; } public String getSendTo() { return sendTo; } public void setSendTo(String sendTo) { this.sendTo = sendTo; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getSendContext() { return sendContext; } public void setSendContext(String sendContext) { this.sendContext = sendContext; } }
3、发送邮箱的类
package com.yezi.mydemo; import java.util.Date; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MessageSender { private Session session; public MessageSender(MailUserInfo mailUserInfo){ //创建连接邮箱 session = Session.getDefaultInstance(mailUserInfo.getProp(),mailUserInfo); } public void sendMessage(MessageInfo messageInfo) throws MessagingException{ Transport.send(createMessage(messageInfo)); } /**对邮件信息进行封装*/ protected Message createMessage(MessageInfo messageInfo) throws MessagingException{ Message message = new MimeMessage(session); message.setFrom(new InternetAddress(messageInfo.getSendFrom())); // message.setRecipient(messageInfo.getRecipientType(),new InternetAddress(messageInfo.getSendTo())); message.setSubject(messageInfo.getSubject()); message.setSentDate(new Date()); message.setText(messageInfo.getSendContext()); return message; } }
4、测试类
package com.yezi.mydemo; import javax.mail.MessagingException; import javax.mail.Message.RecipientType; public class TestM { public static void main(String[] args) throws MessagingException { MailUserInfo mailUserInfo = new MailUserInfo("dsdssdfsd@qq.com","ddddd","smtp.qq.com",25); MessageSender messageSender= new MessageSender(mailUserInfo); MessageInfo messageInfo = new MessageInfo(); messageInfo.setRecipientType(RecipientType.TO); messageInfo.setSubject("MMMM"); messageInfo.setSendContext("NNNN"); messageInfo.setSendFrom("sfsdfs@qq.com"); messageInfo.setSendTo("sfsdfsdf@qq.com"); messageSender.sendMessage(messageInfo); } }
三、解释
1、本Demo只是简单的发送文本方式的邮件。
2、在初次写该代码的时候常见的错误是:
(1)、com.sun.mail.smtp.SMTPSendFailedException: 503 Error: need EHLO and AUTH first !
是因为在发送邮件的时候没有进行用户验证设置:prop.put("mail.smtp.auth", "true");
(2)、Session.getDefaultInstance(mailUserInfo.getProp(),mailUserInfo);获取session的时候
mailUserInfo对象的类要继承Authenticator并要重写getPasswordAuthentication方法。
(3)、messageInfo.setSendFrom(sfsdfs@qq.com);设置的内容要和登入的用户名一至,一定要加后缀,但是登入名可以不加后缀。
3、Message类要进行了解。
相关文章推荐
- JAVA 使用JavaMail发送邮件(mail.jar和activtion.jar)
- 使用JavaMail发送邮件
- JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
- JSP中使用JavaMail发送邮件
- 使用javamail发送html格式邮件
- 使用JavaMail发送邮件
- 使用JavaMail创建邮件和发送邮件
- [转]JavaMail的使用之邮件发送 详解
- JavaMail 发送邮件 Demo
- javaMail 的使用,java代码发送一份邮件
- 邮件原理与JavaMail开发(二)——使用JavaMail创建邮件和发送邮件
- JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
- 使用JavaMail发送邮件
- 使用JavaMail的Java邮件发送
- javamail发送邮件demo
- JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
- 使用javaMail发送邮件
- 使用Spring JavaMail发送邮件总结
- android 随手记 android使用javamail发送邮件
- 在红帽子下配置javamail服务器,使用外面的邮箱地址发送邮件失败