如何在java中發送郵件?我這裏參考的是JavaMail開源項目
依賴jar包:java.mail.jar 點擊下載
普通郵件發送
測試用的是163郵箱,測試郵件發多了就報554了被識別爲垃圾郵件–!
import com.sun.mail.smtp.SMTPTransport;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.Properties;
public class Mail {
public static void main(String[] args) {
try {
sendEmail("出塞", "秦時明月漢時關,萬里長征人未還", "[email protected]");
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
/**
*
* @param subject 郵件主題
* @param text 郵件內容
* @param to 收件人
* @throws GeneralSecurityException
* @throws MessagingException
*/
private static void sendEmail(String subject, String text, String to) throws GeneralSecurityException, MessagingException {
String mailer = "Microsoft Outlook Express 6.00.2900.2869"; // 發信客戶端
String mailhost = "smtp.163.com"; // smtp服務器
String port = "25"; // 默認端口爲25
String user = "[email protected]"; // 郵箱賬號
String password = "xxx"; // 郵箱密碼
// 1、郵件會話實例
Properties props = new Properties(); // 屬性設置
props.put("mail.smtp.host", mailhost);
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props, null);
session.setDebug(true);
// 2、郵件消息內容封裝
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(user));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", mailer);
msg.setSentDate(new Date());
// 3、連接服務器併發送郵件
SMTPTransport t = (SMTPTransport) session.getTransport();
try {
t.connect(user, password);
t.sendMessage(msg, msg.getAllRecipients());
} finally {
t.close();
}
System.out.println("\nMail was sent successfully.");
}
}
SSL加密
測試用了163和sina的郵箱都成功了
import com.sun.mail.smtp.SMTPTransport;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.Properties;
public class Mail {
public static void main(String[] args) {
try {
sendEmail("出塞", "秦時明月漢時關,萬里長征人未還", "[email protected]");
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
private static void sendEmail(String subject, String text, String to) throws GeneralSecurityException, MessagingException {
String mailer = "Microsoft Outlook Express 6.00.2900.2869"; // 發信客戶端
String mailhost = "smtp.sina.com";
String port = "465";
String user = "[email protected]"; // 郵箱賬號
String password = "xxx"; // 郵箱密碼
// 屬性設置
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", mailhost);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.port", port);
props.put("mail.smtp.port", port);
props.put("mail.smtp.ssl.enable", "true"); // 啓用SSL
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.socketFactory", sf); // 信任證書
// 1、郵件會話
Session session = Session.getInstance(props, null);
session.setDebug(true);
// 2、郵件內容
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(user));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", mailer);
msg.setSentDate(new Date());
// 3、連接服務器
SMTPTransport t = (SMTPTransport) session.getTransport();
try {
t.connect(user, password);
t.sendMessage(msg, msg.getAllRecipients());
} finally {
t.close();
}
System.out.println("\nMail was sent successfully.");
}
}
STARTTLS加密
測試用的是微軟outlook郵箱發送成功
import com.sun.mail.smtp.SMTPTransport;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.Properties;
public class Mail {
public static void main(String[] args) {
try {
sendEmail("出塞", "秦時明月漢時關,萬里長征人未還", "[email protected]");
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
private static void sendEmail(String subject, String text, String to) throws GeneralSecurityException, MessagingException {
String mailer = "Microsoft Outlook Express 5.50.4807.1700"; // 發信客戶端
String user = "[email protected]"; // 郵箱賬號
String password = "xxx"; // 郵箱密碼
// 屬性設置
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp-mail.outlook.com"); // 微軟outlook smtp服務器
props.put("mail.smtp.port", "587");
// 1、郵件會話
Session session = Session.getInstance(props, null);
session.setDebug(true); // 設置打印日誌
// 2、郵件內容
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(user));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false));
msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", mailer);
msg.setSentDate(new Date());
// 3、連接服務器
SMTPTransport t = (SMTPTransport) session.getTransport();
try {
t.connect(user, password);
t.sendMessage(msg, msg.getAllRecipients());
} finally {
t.close();
}
System.out.println("\nMail was sent successfully.");
}
}
注:有些郵箱可能需要去官網設置smtp狀態,因爲可能默認沒有開啓smtp支持;並且smtp服務器的具體地址一般在郵箱官網設置裏尋找;
參考
http://www.oracle.com/technetwork/java/javamail/index.html
https://javaee.github.io/javamail/