java发送邮件

发送一封邮件的步骤

1)创建一个javax.mail.Session;对象负责和邮件服务器的交互(创建session需要设置服务器信息,服务器的信息可以放在Properties对象中);

2)创建邮件对象import javax.mail.Message;创建邮件对象的时候需要Session对象。设置好邮件的内容和附加信息(例如:收件人,发件人,发送时间等等);

3)根据Session对象得到一个发送器Transport,然后使用Transport连接服务器,最后调用sendMessage方法发送邮件;

4)关闭transport,邮件发送结束。

 

代码(http://www.blogjava.net/wangfun/archive/2009/04/15/265748.html

第一个类:MailSenderInfo.java

package com.util.mail;  
/** */ /**  
* 发送邮件需要使用的基本信息
*author by wangfun
http://www.5a520.cn 小说520 
*/
   
import java.util.Properties;
public class MailSenderInfo {   
   
// 发送邮件的服务器的IP和端口   
    private String mailServerHost;
   
private String mailServerPort = "25";   
   
// 邮件发送者的地址   
    private String fromAddress;   
   
// 邮件接收者的地址   
    private String toAddress;   
   
// 登陆邮件发送服务器的用户名和密码   
    private String userName;   
   
private String password;   
   
// 是否需要身份验证   
    private boolean validate = false;   
   
// 邮件主题   
    private String subject;   
   
// 邮件的文本内容   
    private String content;   
   
// 邮件附件的文件名   
    private String[] attachFileNames;     
   
/** *//**  
      * 获得邮件会话属性  
     
*/
   
   
public Properties getProperties(){   
      Properties p
= new Properties();   
      p.put(
"mail.smtp.host", this.mailServerHost);   
      p.put(
"mail.smtp.port", this.mailServerPort);   
      p.put(
"mail.smtp.auth", validate ? "true" : "false");   
     
return p;   
    }
   
   
public String getMailServerHost() {   
     
return mailServerHost;   
    }
   
   
public void setMailServerHost(String mailServerHost) {   
     
this.mailServerHost = mailServerHost;   
    }
  
   
public String getMailServerPort() {   
     
return mailServerPort;   
    }
  
   
public void setMailServerPort(String mailServerPort) {   
     
this.mailServerPort = mailServerPort;   
    }
  
   
public boolean isValidate() {   
     
return validate;   
    }
  
   
public void setValidate(boolean validate) {   
     
this.validate = validate;   
    }
  
   
public String[] getAttachFileNames() {   
     
return attachFileNames;   
    }
  
   
public void setAttachFileNames(String[] fileNames) {   
     
this.attachFileNames = fileNames;   
    }
  
   
public String getFromAddress() {   
     
return fromAddress;   
    }
   
   
public void setFromAddress(String fromAddress) {   
     
this.fromAddress = fromAddress;   
    }
  
   
public String getPassword() {   
     
return password;   
    }
  
   
public void setPassword(String password) {   
     
this.password = password;   
    }
  
   
public String getToAddress() {   
     
return toAddress;   
    }
   
   
public void setToAddress(String toAddress) {   
     
this.toAddress = toAddress;   
    }
   
   
public String getUserName() {   
     
return userName;   
    }
  
   
public void setUserName(String userName) {   
     
this.userName = userName;   
    }
  
   
public String getSubject() {   
     
return subject;   
    }
  
   
public void setSubject(String subject) {   
     
this.subject = subject;   
    }
  
   
public String getContent() {   
     
return content;   
    }
  
   
public void setContent(String textContent) {   
     
this.content = textContent;   
    }
   
}
  


第二个类:SimpleMailSender.java

package com.util.mail;  
 
import java.util.Date;   
import java.util.Properties;  
import javax.mail.Address;   
import javax.mail.BodyPart;   
import javax.mail.Message;   
import javax.mail.MessagingException;   
import javax.mail.Multipart;   
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;   
 
/** */ /**  
* 简单邮件(不带附件的邮件)发送器  
http://www.bt285.cn BT下载
*/
   
public class SimpleMailSender  {   
/** *//**  
  * 以文本格式发送邮件  
  *
@param mailInfo 待发送的邮件的信息  
 
*/
   
   
public boolean sendTextMail(MailSenderInfo mailInfo) {   
     
// 判断是否需要身份认证   
      MyAuthenticator authenticator = null;   
      Properties pro
= mailInfo.getProperties();  
     
if (mailInfo.isValidate()) {   
     
// 如果需要身份认证,则创建一个密码验证器   
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());   
      }
  
     
// 根据邮件会话属性和密码验证器构造一个发送邮件的session   
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);   
     
try {   
     
// 根据session创建一个邮件消息   
      Message mailMessage = new MimeMessage(sendMailSession);   
     
// 创建邮件发送者地址   
      Address from = new InternetAddress(mailInfo.getFromAddress());   
     
// 设置邮件消息的发送者   
      mailMessage.setFrom(from);   
     
// 创建邮件的接收者地址,并设置到邮件消息中   
      Address to = new InternetAddress(mailInfo.getToAddress());   
      mailMessage.setRecipient(Message.RecipientType.TO,to);   
     
// 设置邮件消息的主题   
      mailMessage.setSubject(mailInfo.getSubject());   
     
// 设置邮件消息发送的时间   
      mailMessage.setSentDate(new Date());   
     
// 设置邮件消息的主要内容   
      String mailContent = mailInfo.getContent();   
      mailMessage.setText(mailContent);   
     
// 发送邮件   
      Transport.send(mailMessage);  
     
return true;   
      }
catch (MessagingException ex) {   
          ex.printStackTrace();   
      }
   
     
return false;   
    }
   
      
   
/** *//**  
      * 以HTML格式发送邮件  
      *
@param mailInfo 待发送的邮件信息  
     
*/
   
   
public static boolean sendHtmlMail(MailSenderInfo mailInfo){   
     
// 判断是否需要身份认证   
      MyAuthenticator authenticator = null;  
      Properties pro
= mailInfo.getProperties();  
     
//如果需要身份认证,则创建一个密码验证器    
      if (mailInfo.isValidate()) {   
        authenticator
= new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());  
      }
   
     
// 根据邮件会话属性和密码验证器构造一个发送邮件的session   
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);   
     
try {   
     
// 根据session创建一个邮件消息   
      Message mailMessage = new MimeMessage(sendMailSession);   
     
// 创建邮件发送者地址   
      Address from = new InternetAddress(mailInfo.getFromAddress());   
     
// 设置邮件消息的发送者   
      mailMessage.setFrom(from);   
     
// 创建邮件的接收者地址,并设置到邮件消息中   
      Address to = new InternetAddress(mailInfo.getToAddress());   
     
// Message.RecipientType.TO属性表示接收者的类型为TO   
      mailMessage.setRecipient(Message.RecipientType.TO,to);   
     
// 设置邮件消息的主题   
      mailMessage.setSubject(mailInfo.getSubject());   
     
// 设置邮件消息发送的时间   
      mailMessage.setSentDate(new Date());   
     
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象   
      Multipart mainPart = new MimeMultipart();   
     
// 创建一个包含HTML内容的MimeBodyPart   
      BodyPart html = new MimeBodyPart();   
     
// 设置HTML内容   
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");   
      mainPart.addBodyPart(html);   
     
// 将MiniMultipart对象设置为邮件内容   
      mailMessage.setContent(mainPart);   
     
// 发送邮件   
      Transport.send(mailMessage);   
     
return true;   
      }
catch (MessagingException ex) {   
          ex.printStackTrace();   
      }
   
     
return false;   
    }
   
}
  

第三个类:MyAuthenticator.java

package com.util.mail;  
 
import javax.mail. * ;  
    
public class MyAuthenticator extends Authenticator {  
    String userName
=null;  
    String password
=null;  
       
   
public MyAuthenticator(){  
    }
  
   
public MyAuthenticator(String username, String password) {   
       
this.userName = username;   
       
this.password = password;   
    }
   
   
protected PasswordAuthentication getPasswordAuthentication(){  
       
return new PasswordAuthentication(userName, password);  
    }
  
}
  


下面给出使用上面三个类的代码:

public static void main(String[] args) {  
        
//这个类主要是设置邮件  
      MailSenderInfo mailInfo = new MailSenderInfo();   
      mailInfo.setMailServerHost(
"smtp.163.com");   
      mailInfo.setMailServerPort(
"25");   
      mailInfo.setValidate(
true);   
      mailInfo.setUserName(
"han2000lei@163.com");   
      mailInfo.setPassword(
"**********");//您的邮箱密码   
      mailInfo.setFromAddress("han2000lei@163.com");   
      mailInfo.setToAddress(
"han2000lei@163.com");   
      mailInfo.setSubject(
"设置邮箱标题 如http://www.guihua.org 中国桂花网");   
      mailInfo.setContent(
"设置邮箱内容 如http://www.guihua.org 中国桂花网 是中国最大桂花网站==");   
        
//这个类主要来发送邮件  
      SimpleMailSender sms = new SimpleMailSender();  
          sms.sendTextMail(mailInfo);
//发送文体格式   
          sms.sendHtmlMail(mailInfo);//发送html格式  
    }
 

最后,给出朋友们几个注意的地方:
1、使用此代码你可以完成你的javamail的邮件发送功能。三个类缺一不可。
2、这三个类我打包是用的com.util.mail包,如果不喜欢,你可以自己改,但三个类文件必须在同一个包中
3、不要使用你刚刚注册过的邮箱在程序中发邮件,如果你的163邮箱是刚注册不久,那你就不要使用“smtp.163.com”。因为你发不出去。刚注册的邮箱是不会给你这种权限的,也就是你不能通过验证。要使用你经常用的邮箱,而且时间比较长的。
4、另一个问题就是mailInfo.setMailServerHost("smtp.163.com");mailInfo.setFromAddress("han2000lei@163.com");这两句话。即如果你使用163smtp服务器,那么发送邮件地址就必须用163的邮箱,如果不的话,是不会发送成功的。
5、关于javamail验证错误的问题,网上的解释有很多,但我看见的只有一个。就是我的第三个类。你只要复制全了代码,我想是不会有问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值