用java代码写邮件,已经测试成功!

来源:互联网 发布:蝙蝠侠阿甘骑士知乎 编辑:程序博客网 时间:2024/05/01 20:32

1、首先创建一个继承自javax.mail.Authenticator的具体类,重写里面的getPasswordAuthentication()方法;

2、创建Properties对象prop,prop中存放smtp服务器的地址等参数;

3、通过prop对象和继承自javax.mail.Authenticator的具体类对象authenticator创建javax.mail.session对象session,相当于登录邮箱一样;

4、构建邮件内容,创建javax.mail.internet.MimeMessage对象,指定发件人、收件人、邮件主题、邮件内容等;

5、使用javax.mail.Transport工具类发邮件。

具体的实例如下,一般的邮箱都可以,但gmail邮箱作为收件邮箱时会卡住,一次成功。

////////////////////继承自javax.mail.Authenticator的具体类

package com.controller;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/** 
 * 
 * 用作服务器邮箱登录校验 
 */
public class MailAuthenticator extends Authenticator{
    //登录邮箱的用户名
private String username;
//密码
private String password;

public MailAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}


    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
   
    return new PasswordAuthentication(username,password);
   
    }
public String getUsername() {
return username;
}


public void setUsername(String username) {
this.username = username;
}


public String getPassword() {
return password;
}


public void setPassword(String password) {
this.password = password;
}

}

//////////////////发送邮件的主类

package com.controller;

import java.util.List;
import java.util.Properties;

import javax.mail.AuthenticationFailedException;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

/** 
 * 发送邮件的主类
 */
public class SendMail {
    //发送邮件的props文件
private final transient Properties props=System.getProperties();
//邮件服务器登录验证
private transient MailAuthenticator authenticator;
//邮箱session
private transient Session session;
/**
* 初始化发送邮件
* @param smtpHostName邮件服务器地址
* @param username发送邮件的用户名
* @param password密码
*/
public SendMail(final String smtpHostName,final String username,final String password){
init(username,password,smtpHostName);
}
/**
* 初始化发送邮件
* @param username 发送邮件的用户名
* @param password 密码
*/
public SendMail(final String username,final String password){
//通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
final String smtpHostName="smtp."+username.split("@")[1];
init(username,password,smtpHostName);
}
/**

* 初始化
* @param username 发送邮件的用户名
* @param password 密码
* @param smtpHostName SMTP主机地址
*/
private void init(String username, String password, String smtpHostName) {
//初始化props
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", smtpHostName);
//验证
authenticator=new MailAuthenticator(username,password);
//创建session
session=Session.getInstance(props,authenticator);
}
/**
* 发送邮件
* @param recipient收件人邮箱地址
* @param subject邮件主题
* @param content邮件内容
* @throws MessagingException 
* @throws AddressException 
*/
public void send(String recipient,String subject,Object content) throws AddressException, MessagingException{
//创建mime类型的邮件
final MimeMessage message=new MimeMessage(session);
//设置发信人
message.setFrom(new InternetAddress(authenticator.getUsername()));
//设置收件人
message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
//设置主题
message.setSubject(subject);
//设置邮件内容
message.setContent(content.toString(), "text/html;charset=utf-8");
//发送
Transport.send(message,message.getRecipients(RecipientType.TO));
}
/**
* 群发邮件
* @param recipients 收件人们
* @param subject 主题
* @param content 内容
* @throws AddressException
* @throws MessagingException
*/
public void send(List<String> recipients,String subject,Object content) throws AddressException, MessagingException{
//创建mime类型的邮件
final MimeMessage message=new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress(authenticator.getUsername()));
//设置收件人们
InternetAddress[] addresses=new InternetAddress[recipients.size()];
for(int i=0;i<recipients.size();i++){
addresses[i]=new InternetAddress(recipients.get(i));
}
message.setRecipients(RecipientType.TO,addresses);
//设置主题
message.setSubject(subject);
//设置邮件内容
message.setContent(content.toString(), "text/html;charset=utf-8");
//发送
Transport.send(message);
}
//主函数
public static void main(String[] args) throws AddressException, MessagingException,AuthenticationFailedException{
//发件人的地址和密码
SendMail sm=new SendMail("发件人邮箱","发件人密码");
//收件人地址、邮件主题、邮件内容
sm.send("收件人地址", "呵呵呵", "哈哈哈哈哈!");
}

}

原创粉丝点击