您的位置:首页 > 编程语言 > Java开发

javamail的Demo,使用发送邮件

2013-10-27 11:12 330 查看
注:本文参照孙卫琴编写的<<网络编程详解>>

一、初始环境

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类要进行了解。

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: