Java實現傳送郵件
阿新 • • 發佈:2021-06-24
1.前置條件
傳送郵件的前提是需要java的一個javax.mail的一個jar包。它支援一些簡單的郵件傳輸協議,例如:SMTP,POP3等。我使用的是javax.mail-1.16.2.jar。
需要下載的話,可以到Javaee官方的github下載:https://javaee.github.io/javamail/#Download_JavaMail_Release
點選即可下載
若使用maven專案,則可以使用
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api --> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.6.2</version> </dependency>
2.Java實現純文字的郵件傳送
先使用一個utils類,生成6位的隨機數
package Utils; import java.util.Random; /** * @author ryk * @version 1.0.0 * @ClassName MessageUtils.java * @createTime 2021年06月09日 23:50:00 */ public class MessageUtils { //返回6位隨機數 public static String message(){ Random random = new Random(); String str = ""; for (int i = 0; i < 6; i++) { str+=random.nextInt(10); } return str; } public static void main(String[] args) { MessageUtils messageUtils = new MessageUtils(); System.out.println(messageUtils.message()); } }
下面在將這個驗證碼傳送到指定的郵箱
package Mail; import Utils.MessageUtils; import java.util.Date; import java.util.Properties; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType; /** * @author ryk * @version 1.0.0 * @ClassName sendMail.java * @Description TODO * @createTime 2021年06月09日 23:54:00 */ public class sendMail { /** * 傳送郵件 * @param emailPassword email的授權碼 * @param receiver 接收人 * @param nickname 向接收人顯示的暱稱 * @param sender 傳送人 * @param messageNumber 驗證碼 * @throws Exception */ public static void sendEmails(String emailPassword, String sender, String receiver , String messageNumber, String nickname) throws Exception{ Properties props = new Properties(); props.setProperty("mail.smtp.auth","true"); //傳輸方式 props.setProperty("mail.transport.protocol","smtp"); //使用的伺服器網易的伺服器,也可以使用QQ的 props.setProperty("mail.smtp.host", "smtp.163.com"); Session session = Session.getInstance(props); session.setDebug(true); Transport transport = session.getTransport(); transport.connect(sender, emailPassword); Message message = createMessage(session, receiver, nickname, sender, messageNumber); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } /** * 建立一封郵件 * @param session * @param receiver 接收人 * @param nickname 向接收人顯示的暱稱 * @param sender 傳送人 * @param messageNumber 驗證碼 * @return 返回一個郵件 * @throws Exception */ public static MimeMessage createMessage (Session session, String receiver, String nickname, String sender, String messageNumber) throws Exception{ MimeMessage message=new MimeMessage(session); message.setFrom(new InternetAddress(nickname + "<" + sender + ">")); message.setRecipient(RecipientType.TO, new InternetAddress(receiver)); message.setSubject("郵件主題"); message.setContent("驗證碼為:" + messageNumber, "text/html;charset=UTF-8"); message.setSentDate(new Date()); return message; } public static void main(String[] args) { try { //發件人 String sender = "[email protected]"; //收件人 String receiver = "[email protected]"; //驗證碼 String messageNumber = MessageUtils.message(); //發件人暱稱 String nickname = "xxx"; sendEmails("請填入自己的授權碼", sender, receiver, messageNumber, nickname); } catch (Exception e) { e.printStackTrace(); } } }
然後執行main即可傳送郵件。