qq郵箱群發(fā)驗證碼

  

QQ郵箱的用處多多,其實不止可以發(fā)郵件,還算可以發(fā)驗證碼,下面和一米軟件一起來看看qq郵箱群發(fā)驗證碼的代碼吧。

qq郵箱群發(fā)驗證碼

  package text_mali;

  import javax.mail.Session;

  import javax.mail.Transport;

  import javax.mail.internet.InternetAddress;

  import javax.mail.internet.MimeMessage;

  import java.util.Date;

  import java.util.Properties;

  public class SendEmail {

  // 發(fā)件人的 郵箱 和 密碼(替換為自己的郵箱和密碼)

  // PS: 某些郵箱服務器為了增加郵箱本身密碼的安全性,給 SMTP 客戶端設置了獨立密碼(有的郵箱稱為“授權碼”),

  // 對于開啟了獨立密碼的郵箱, 這里的郵箱密碼必需使用這個獨立密碼(授權碼)。

  private final String myEmailAccount = "";//發(fā)送的郵箱

  private final String myEmailPassword = "";

  //這個是密碼(對于qq來說是授權碼,下面會解釋為什么不是密碼)

  // 收件人郵箱(替換為自己知道的有效郵箱)

  private String receiveMailAccount = "" ;

  private String info=null;

  // 信息內(nèi)容

  public void setReceiveMailAccount(String receiveMailAccount) {

  this.receiveMailAccount = receiveMailAccount;

  }

  public void setInfo(String info) {

  this.info = info;

  }

  // 發(fā)件人郵箱的 SMTP 服務器地址, 必須準確, 不同郵件服務器地址不同, 一般(只是一般, 絕非絕對)格式為: smtp.xxx.com

  // 網(wǎng)易163郵箱的 SMTP 服務器地址為: smtp.163.com 騰訊: smtp.qq.com

  private String myEmailSMTPServer = "smtp.qq.com";

  public void Send() throws Exception {

  // 1. 創(chuàng)建參數(shù)配置, 用于連接郵件服務器的參數(shù)配置

  Properties props = new Properties(); // 參數(shù)配置

  props.setProperty("mail.transport.protocol", "smtp"); // 使用的協(xié)議(JavaMail規(guī)范要求)

  props.setProperty("mail.smtp.host", myEmailSMTPServer); // 發(fā)件人的郵箱的 SMTP 服務器地址

  props.setProperty("mail.smtp.auth", "true"); // 需要請求認證

  // PS: 某些郵箱服務器要求 SMTP 連接需要使用 SSL 安全認證 (為了提高安全性, 郵箱支持SSL連接, 也可以自己開啟),

  // 如果無法連接郵件服務器, 仔細查看控制臺打印的 log, 如果有有類似 “連接失敗, 要求 SSL 安全連接” 等錯誤,

  // 打開下面 /* ... */ 之間的注釋代碼, 開啟 SSL 安全連接。

  // SMTP 服務器的端口 (非 SSL 連接的端口一般默認為 25, 可以不添加, 如果開啟了 SSL 連接,

  // 需要改為對應郵箱的 SMTP 服務器的端口, 具體可查看對應郵箱服務的幫助,

  // QQ郵箱的SMTP(SLL)端口為465或587, 其他郵箱自行去查看)

  final String smtpPort = "465";

  props.setProperty("mail.smtp.port", smtpPort);

  props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

  props.setProperty("mail.smtp.socketFactory.fallback", "false");

  props.setProperty("mail.smtp.socketFactory.port", smtpPort);

  // 2. 根據(jù)配置創(chuàng)建會話對象, 用于和郵件服務器交互

  Session session = Session.getDefaultInstance(props);

  session.setDebug(true); // 設置為debug模式, 可以查看詳細的發(fā)送 log

  // 3. 創(chuàng)建一封郵件

  MimeMessage message = createMessage(session, myEmailAccount, receiveMailAccount,info);

  // 4. 根據(jù) Session 獲取郵件傳輸對象

  Transport transport = session.getTransport();

  // 5. 使用 郵箱賬號 和 密碼 連接郵件服務器, 這里認證的郵箱必須與 message 中的發(fā)件人郵箱一致, 否則報錯

  //

  // PS_01: 成敗的判斷關鍵在此一句, 如果連接服務器失敗, 都會在控制臺輸出相應失敗原因的 log,

  // 仔細查看失敗原因, 有些郵箱服務器會返回錯誤碼或查看錯誤類型的鏈接, 根據(jù)給出的錯誤

  // 類型到對應郵件服務器的幫助網(wǎng)站上查看具體失敗原因。

  //

  // PS_02: 連接失敗的原因通常為以下幾點, 仔細檢查代碼:

  // (1) 郵箱沒有開啟 SMTP 服務;

  // (2) 郵箱密碼錯誤, 例如某些郵箱開啟了獨立密碼;

  // (3) 郵箱服務器要求必須要使用 SSL 安全連接;

  // (4) 請求過于頻繁或其他原因, 被郵件服務器拒絕服務;

  // (5) 如果以上幾點都確定無誤, 到郵件服務器網(wǎng)站查找?guī)椭?/P>

  //

  // PS_03: 仔細看log, 認真看log, 看懂log, 錯誤原因都在log已說明。

  transport.connect(myEmailAccount, myEmailPassword);

  // 6. 發(fā)送郵件, 發(fā)到所有的收件地址, message.getAllRecipients() 獲取到的是在創(chuàng)建郵件對象時添加的所有收件人, 抄送人, 密送人

  transport.sendMessage(message, message.getAllRecipients());

  // 7. 關閉連接

  transport.close();

  }

  /**

  * 創(chuàng)建一封只包含文本的簡單郵件

  *

  * @param session 和服務器交互的會話

  * @param sendMail 發(fā)件人郵箱

  * @param receiveMail 收件人郵箱

  * @return

  * @throws Exception

  */

  public MimeMessage createMessage(Session session, String sendMail, String receiveMail,String info) throws Exception {

  // 1. 創(chuàng)建一封郵件

  MimeMessage message = new MimeMessage(session);

  // 2. From: 發(fā)件人(昵稱有廣告嫌疑,避免被郵件服務器誤認為是濫發(fā)廣告以至返回失敗,請修改昵稱)

  message.setFrom(new InternetAddress(sendMail, "學習測試", "UTF-8"));

  // 3. To: 收件人(可以增加多個收件人、抄送、密送)

  message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "", "UTF-8"));

  // 4. Subject: 郵件主題(標題有廣告嫌疑,避免被郵件服務器誤認為是濫發(fā)廣告以至返回失敗,請修改標題)

  message.setSubject("XXX的驗證碼", "UTF-8");

  // 5. Content: 郵件正文(可以使用html標簽)(內(nèi)容有廣告嫌疑,避免被郵件服務器誤認為是濫發(fā)廣告以至返回失敗,請修改發(fā)送內(nèi)容)

  message.setContent("【驗證碼】:"+info, "text/html;charset=UTF-8");

  // 6. 設置發(fā)件時間

  message.setSentDate(new Date());

  // 7. 保存設置

  message.saveChanges();

  return message;

  }

  }

  Servlet

  package text_mali;

  import java.io.IOException;

  import javax.servlet.ServletException;

  import javax.servlet.http.HttpServlet;

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

  /**

  * Servlet implementation class Sendmail

  */

  public class TestSendMail extends HttpServlet {

  private static final long serialVersionUID = 1L;

  /**

  * @see HttpServlet#HttpServlet()

  */

  public TestSendMail() {

  super();

  // TODO Auto-generated constructor stub

  }

  /**

  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

  */

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  // TODO Auto-generated method stub

  SendEmail sen = new SendEmail();

  sen.setReceiveMailAccount("");//填收件人的郵箱地址

  sen.setInfo("XXX,XXX,收到請回復!");

  try {

  sen.Send();

  } catch (Exception e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  /**

  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

  */

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  // TODO Auto-generated method stub

  doGet(request, response);

  }

  }

相關資訊

推薦軟件