Java完成簡略郵件發送。本站提示廣大學習愛好者:(Java完成簡略郵件發送)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成簡略郵件發送正文
JAVA MAIL是應用現有的郵件賬戶發送郵件的對象,好比說,我在網易注冊一個郵箱賬戶,經由過程JAVA Mail的操控,我可以不親身登錄網易郵箱,讓法式主動的應用網易郵箱發送郵件。這一機制被普遍的用在注冊激活和渣滓郵件的發送等方面。
Java郵件發送的年夜致進程是如許的:
1、構建一個繼續自javax.mail.Authenticator的詳細類,偏重寫外面的getPasswordAuthentication()辦法。此類是用作登錄校驗的,以確保你對該郵箱有發送郵件的權力。
2、構建一個properties文件,該文件中寄存SMTP辦事器地址等參數。
3、經由過程構建的properties文件和javax.mail.Authenticator詳細類來創立一個javax.mail.Session。Session的創立,就相當於登錄郵箱一樣。剩下的天然就是新建郵件。
4、構建郵件內容,普通是javax.mail.internet.MimeMessage對象,並指定發送人,收信人,主題,內容等等。
5、應用javax.mail.Transport對象類發送郵件。
上面是我封裝的代碼,正文也比擬具體。
1、起首是繼續自javax.mail.Authenticator的一個詳細類。getPasswordAuthentication()辦法也就是構建一個PasswordAuthentication對象並前往,有點隱晦JAVA Mail如許的設計意圖,能夠是javax.mail.Authenticator為我們供給了附加的包管平安的驗證辦法吧。
package com.mzule.simplemail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 辦事器郵箱登錄驗證
*
* @author MZULE
*
*/
public class MailAuthenticator extends Authenticator {
/**
* 用戶名(登錄郵箱)
*/
private String username;
/**
* 暗碼
*/
private String password;
/**
* 初始化郵箱和暗碼
*
* @param username 郵箱
* @param password 暗碼
*/
public MailAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
String getPassword() {
return password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
2、郵件發送類,剩下的步調都是在這個類完成的。代碼中的SimpleMail是封裝了郵件主題和內容的一個POJO。認為在一個辦法參數中既包括主題又包括內容,不太適合,故重載了此辦法。還有就是由於年夜多半郵箱的SMTP辦事器地址都是可以經由過程郵箱地址算出來,簡略起見,供給了一個不須要SMTP辦事器地址的結構器。
package com.mzule.simplemail;
import java.util.List;
import java.util.Properties;
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;
/**
* 簡略郵件發送器,可單發,群發。
*
* @author MZULE
*
*/
public class SimpleMailSender {
/**
* 發送郵件的props文件
*/
private final transient Properties props = System.getProperties();
/**
* 郵件辦事器登錄驗證
*/
private transient MailAuthenticator authenticator;
/**
* 郵箱session
*/
private transient Session session;
/**
* 初始化郵件發送器
*
* @param smtpHostName
* SMTP郵件辦事器地址
* @param username
* 發送郵件的用戶名(地址)
* @param password
* 發送郵件的暗碼
*/
public SimpleMailSender(final String smtpHostName, final String username,
final String password) {
init(username, password, smtpHostName);
}
/**
* 初始化郵件發送器
*
* @param username
* 發送郵件的用戶名(地址),並以此解析SMTP辦事器地址
* @param password
* 發送郵件的暗碼
*/
public SimpleMailSender(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 AddressException
* @throws MessagingException
*/
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);
}
/**
* 群發郵件
*
* @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()));
// 設置收件人們
final int num = recipients.size();
InternetAddress[] addresses = new InternetAddress[num];
for (int i = 0; i < num; 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);
}
/**
* 發送郵件
*
* @param recipient
* 收件人郵箱地址
* @param mail
* 郵件對象
* @throws AddressException
* @throws MessagingException
*/
public void send(String recipient, SimpleMail mail)
throws AddressException, MessagingException {
send(recipient, mail.getSubject(), mail.getContent());
}
/**
* 群發郵件
*
* @param recipients
* 收件人們
* @param mail
* 郵件對象
* @throws AddressException
* @throws MessagingException
*/
public void send(List<String> recipients, SimpleMail mail)
throws AddressException, MessagingException {
send(recipients, mail.getSubject(), mail.getContent());
}
}
3、挪用下面的郵箱發送器,可以構建一個工場類,工場類可以封裝創立的進程,所以經由過程讀設置裝備擺設文件獲得郵箱用戶名,暗碼都邑變得非常便利。上面的代碼是我在寫不雅察者形式的時刻寫的,只是簡略演示了工場類。
package com.mzule.dp.observer.factory;
import com.mzule.dp.observer.constant.MailSenderType;
import com.mzule.simplemail.SimpleMailSender;
/**
* 發件箱工場
*
* @author MZULE
*
*/
public class MailSenderFactory {
/**
* 辦事郵箱
*/
private static SimpleMailSender serviceSms = null;
/**
* 獲得郵箱
*
* @param type 郵箱類型
* @return 相符類型的郵箱
*/
public static SimpleMailSender getSender(MailSenderType type) {
if (type == MailSenderType.SERVICE) {
if (serviceSms == null) {
serviceSms = new SimpleMailSender("invisible@126.com",
"hidden");
}
return serviceSms;
}
return null;
}
}
4、發送郵件,照樣不雅察者形式DEMO外面的代碼,呼呼。
package com.mzule.dp.observer.observer;
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import com.mzule.dp.observer.constant.MailSenderType;
import com.mzule.dp.observer.factory.MailSenderFactory;
import com.mzule.dp.observer.po.Product;
import com.mzule.simplemail.SimpleMailSender;
public class ProductPriceObserver implements Observer {
@Override
public void update(Observable obj, Object arg) {
Product product = null;
if (obj instanceof Product) {
product = (Product) obj;
}
if (arg instanceof Float) {
Float price = (Float) arg;
Float decrease = product.getPrice() - price;
if (decrease > 0) {
// 發送郵件
SimpleMailSender sms = MailSenderFactory
.getSender(MailSenderType.SERVICE);
List<String> recipients = new ArrayList<String>();
recipients.add("invisible@qq.com");
recipients.add("invisible@gmail.com");
try {
for (String recipient : recipients) {
sms.send(recipient, "價錢更改", "您存眷的物品"
+ product.getName() + "降價了,由"
+ product.getPrice() + "元降到" + price + "元,降幅達"
+ decrease + "元國民幣。趕緊購物吧。");
}
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}
}
5、檢查郵件能否發送勝利了。
以上就是java郵件發送的全體進程,願望對年夜家的進修有所贊助。