java 邮件发送实现相关文章

来源:互联网 发布:数据库垂直切分 编辑:程序博客网 时间:2024/06/16 03:23

如果你想用现成的,去看看JavaMail API
如果你想自己做,去看看SMTP协议格式

什么是SMTP? 

  SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一种提供可靠且有效电子邮件传输的协议。SMTP是建模在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。 



协议结构 

  SMTP命令是发送于SMTP主机之间的ASCII信息,下面列举了5个常用SMTP指令 

HELO <服务商><域名><换行> 与SMTP服务器握手 
MAIL <服务商> FROM:<发件人地址><换行> 传送发件人的邮箱地址 
RCPT <服务商> TO:<收件人地址><换行>  传送收件人的邮箱地址 
DATA <换行> 发送邮件数据,以新行.结束(包括信头与信体) 
QUIT <换行> 与SMTP服务器断开连接 



信头与信体 

  在DATA指令所传送的数据中,信头和信体以一个空行分隔,下面列举了部分常用信头 

From: 发件人地址 
To: 收件人地址 
Subject: 邮件主题 
Date: 发信时间 
MIME-Version: MIME版本 
Content-Type: 内容类型 
Content-Transfer-Encoding: 编码方式 
X-Priority: 优先级 
X-Mailer: 代理发信的客户端 



通过Socket发送SMTP邮件 

1.Base64 

  Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式,它要求把每三个8位的字节转换为四个6位的字节,然后在6位字节的高位补两个0,最后组成四个8位的字节。在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。这种加密方式并非绝对安全,只能做到让人不能直接看出原本内容而已。 

 

 

 

文章一:

1、需要用到javamail的jar包,因为其中的javax.mail.*是包含在其中的;

2、有了javamail的jar包,程序完全可以编译通过,但是执行的时候就会产生异常。其原因是在使用javamail发送邮件的过程中均需要把activation.jar包也包含进来。

3、导入java.util.Properties

有了这三条做保证,程序就可以运行了。

源代码如下:

import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.*;

public class sendMail {

 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  try{
   String   tto="dfs@dfd.edu.cn";  
   String   ttitle="Test";  
   String   tcontent="This is a Test!";  
    
   Properties   props=new   Properties();//也可用Properties   props   =   System.getProperties();    
   props.put("mail.smtp.host","smtp.163.com");//存储发送邮件服务器的信息  
   props.put("mail.smtp.auth","true");//同时通过验证  
   Session   s=Session.getInstance(props);//根据属性新建一个邮件会话  
   s.setDebug(true);  
    
   MimeMessage   message=new   MimeMessage(s);//由邮件会话新建一个消息对象  
    
//   设置邮件  
   InternetAddress   from=new   InternetAddress("username@163.com");  
   message.setFrom(from);//设置发件人  
   InternetAddress   to=new   InternetAddress(tto);  
   message.setRecipient(Message.RecipientType.TO,to);//设置收件人,并设置其接收类型为TO  
   message.setSubject(ttitle);//设置主题  
   message.setText(tcontent);//设置信件内容  
   message.setSentDate(new   java.util.Date());//设置发信时间  
    
//   发送邮件  
   message.saveChanges();//存储邮件信息  
   Transport   transport=s.getTransport("smtp");  
   transport.connect("smtp.163.com","username","passwd");//以smtp方式登录邮箱  
   transport.sendMessage(message,message.getAllRecipients());//发送邮件,其中第二个参数是所有  
//   已设好的收件人地址  
   transport.close();
  }catch(MessagingException e){
   System.out.print(e.toString());
  }
 }
}

 

 

文章二:

import java.util.Date;

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;

import com.me.util.mail.MyAuthenticator;


 
public class SimpleMailSender {
 
 public static boolean sendTextMail(MailSenderInfo mailInfo) {
  // 判断是否需要身份认证
  //MyAuthenticator authenticator = null;
  //if (mailInfo.isValidate()) {
  // 如果需要身份认证,则创建一个密码验证器
  // authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
 // }
  // 根据邮件会话属性和密码验证器构造一个发送邮件的session
  Session sendMailSession = Session.getInstance(mailInfo
  .getProperties());
  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);
  System.out.println("发送成功");
  return true;
  } catch (MessagingException ex) {
  ex.printStackTrace();
  }
  return false;
 }

 
 public static boolean sendHtmlMail(MailSenderInfo mailInfo){
  // 判断是否需要身份认证
 // MyAuthenticator authenticator = null;
  //if (mailInfo.isValidate()) {
  // 如果需要身份认证,则创建一个密码验证器
  // authenticator = new MyAuthenticator(mailInfo.getUserName(),
  // mailInfo.getPassword());
  //}
  // 根据邮件会话属性和密码验证器构造一个发送邮件的session
  Session sendMailSession = Session.getInstance(mailInfo
  .getProperties());
  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=GBK");
  mainPart.addBodyPart(html);
  // 将MiniMultipart对象设置为邮件内容
  mailMessage.setContent(mainPart);
  // 发送邮件
  Transport.send(mailMessage);
  System.out.println("发送成功!");
  return true;
  } catch (MessagingException ex) {
  ex.printStackTrace();
  }
  return false;
 }


 public static void main(String[] args) {
  // 创建邮件信息
  MailSenderInfo mailInfo = new MailSenderInfo();
  mailInfo.setMailServerHost("smtp.sohu.com");
  mailInfo.setMailServerPort("25");
 // mailInfo.setValidate(true);
  mailInfo.setUserName("aguai0");
  mailInfo.setPassword("12a416");
  mailInfo.setFromAddress("aguai0@sina.com");
  mailInfo.setToAddress("aguai0@sohu.com");
  mailInfo.setSubject("MyMail测试");
  mailInfo.setContent("我的邮件测试\n\rMy test mail\n\r");

  // 以文本格式发送邮件
  SimpleMailSender.sendTextMail(mailInfo);
  // 以HTML格式发送邮件
  //SimpleMailSender.sendHtmlMail(mailInfo);
 }
}

 


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 = true;
  
 // 邮件主题
 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;
  
}

http://www.blogjava.net/ajie/archive/2005/12/18/24437.html 有个这样的例子 可以参考


 

 

文章三:

  


package com.me.util.mail; 


import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.Date; 
import javax.activation.*; 
import java.io.*; 
import com.me.util.*; 

public class sendMail { 

private MimeMessage mimeMsg; //MIME邮件对象 

private Session session; //邮件会话对象 
private Properties props; //系统属性 
private boolean needAuth = false; //smtp是否需要认证 

private String username = ""; //smtp认证用户名和密码 
private String password = ""; 

private Multipart mp; //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象 



 
public sendMail() { 
setSmtpHost(getConfig.mailHost);//如果没有指定邮件服务器,就从getConfig类中获取 
createMimeMessage(); 
} 

public sendMail(String smtp){ 
setSmtpHost(smtp); 
createMimeMessage(); 
} 



 
public void setSmtpHost(String hostName) { 
System.out.println("设置系统属性:mail.smtp.host = "+hostName); 
if(props == null)props = System.getProperties(); //获得系统属性对象 

props.put("mail.smtp.host",hostName); //设置SMTP主机 
} 


 
public boolean createMimeMessage() 
{ 
try{ 
System.out.println("准备获取邮件会话对象!"); 
session = Session.getDefaultInstance(props,null); //获得邮件会话对象 
} 
catch(Exception e){ 
System.err.println("获取邮件会话对象时发生错误!"+e); 
return false; 
} 

System.out.println("准备创建MIME邮件对象!"); 
try{ 
mimeMsg = new MimeMessage(session); //创建MIME邮件对象 
mp = new MimeMultipart(); 

return true; 
} 
catch(Exception e){ 
System.err.println("创建MIME邮件对象失败!"+e); 
return false; 
} 
} 



 
public void setNeedAuth(boolean need) { 
System.out.println("设置smtp身份认证:mail.smtp.auth = "+need); 
if(props == null)props = System.getProperties(); 

if(need){ 
props.put("mail.smtp.auth","true"); 
}else{ 
props.put("mail.smtp.auth","false"); 
} 
} 
 
public void setNamePass(String name,String pass) { 
username = name; 
password = pass; 
} 
 
public boolean setSubject(String mailSubject) { 
System.out.println("设置邮件主题!"); 
try{ 
mimeMsg.setSubject(mailSubject); 
return true; 
} 
catch(Exception e) { 
System.err.println("设置邮件主题发生错误!"); 
return false; 
} 
} 
 
public boolean setBody(String mailBody) { 
try{ 
BodyPart bp = new MimeBodyPart(); 
bp.setContent(""+mailBody,"text/html;charset=GB2312"); 
mp.addBodyPart(bp); 

return true; 
} 
catch(Exception e){ 
System.err.println("设置邮件正文时发生错误!"+e); 
return false; 
} 
} 
 
public boolean addFileAffix(String filename) { 

System.out.println("增加邮件附件:"+filename); 
try{ 
BodyPart bp = new MimeBodyPart(); 
FileDataSource fileds = new FileDataSource(filename); 
bp.setDataHandler(new DataHandler(fileds)); 
bp.setFileName(fileds.getName()); 

mp.addBodyPart(bp); 

return true; 
} 
catch(Exception e){ 
System.err.println("增加邮件附件:"+filename+"发生错误!"+e); 
return false; 
} 
} 
 
public boolean setFrom(String from) { 
System.out.println("设置发信人!"); 
try{ 
mimeMsg.setFrom(new InternetAddress(from)); //设置发信人 
return true; 
} 
catch(Exception e) 
{ return false; } 
} 
 
public boolean setTo(String to){ 
if(to == null)return false; 
try{ 
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); 
return true; 
} 
catch(Exception e) 
{ return false; } 

} 

 
public boolean setCopyTo(String copyto) 
{ 
if(copyto == null)return false; 
try{ 
mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto)); 
return true; 
} 
catch(Exception e) 
{ return false; } 
} 
 
public boolean sendout() 
{ 
try{ 
mimeMsg.setContent(mp); 
mimeMsg.saveChanges(); 
System.out.println("正在发送邮件...."); 

Session mailSession = Session.getInstance(props,null); 
Transport transport = mailSession.getTransport("smtp"); 
transport.connect((String)props.get("mail.smtp.host"),username,password); 
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO)); 
//transport.send(mimeMsg); 

System.out.println("发送邮件成功!"); 
transport.close(); 

return true; 
} 
catch(Exception e) 
{ 
System.err.println("邮件发送失败!"+e); 
return false; 
} 
} 


 
public static void main(String[] args) { 

String mailbody = ""+ 
"

";



sendMail themail = new sendMail("smtp.msn.com"); 
themail.setNeedAuth(true); 

if(themail.setSubject("标题") == false) return; 
if(themail.setBody(mailbody) == false) return; 
if(themail.setTo("gates@msn.com") == false) return; 
if(themail.setFrom("bill@msn.com") == false) return; 
if(themail.addFileAffix("c:\\boot.ini") == false) return; 
themail.setNamePass("user","password"); 

if(themail.sendout() == false) return; 
} 
}

0 0