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

java 邮件发送实现相关文章

2014-05-25 22:26 281 查看
如果你想用现成的,去看看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;

}

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