java如何實現發送郵箱


 

package cn.buy.util;
import java.security.GeneralSecurityException;
import java.util.Properties;
 import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;
import cn.buy.entity.User;
 public class Sendmail extends Thread {
     private User user = null;
     public Sendmail(User user) {
        this.user = user;
    }
     @Override
    public void run() {
         // 跟smtp服務器建立一個連接
        Properties p = new Properties();
        // 設置郵件服務器主機名
        p.setProperty("mail.host", "smtp.qq.com");// 指定郵件服務器,默認端口 25
        // 發送服務器需要身份驗證
        p.setProperty("mail.smtp.auth", "true");// 要采用指定用戶名密碼的方式去認證
        // 發送郵件協議名稱
        p.setProperty("mail.transport.protocol", "smtp");
         // 開啟SSL加密,否則會失敗
        MailSSLSocketFactory sf = null;
        try {
            sf = new MailSSLSocketFactory();
        } catch (GeneralSecurityException e1) {
            e1.printStackTrace();
        }
        sf.setTrustAllHosts(true);
        p.put("mail.smtp.ssl.enable", "true");
        p.put("mail.smtp.ssl.socketFactory", sf);
         // 開啟debug調試,以便在控制台查看
        // session.setDebug(true);也可以這樣設置
        // p.setProperty("mail.debug", "true");
         // 創建session
        Session session = Session.getDefaultInstance(p, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用戶名可以用QQ賬號也可以用郵箱的別名
                PasswordAuthentication pa = new PasswordAuthentication(
                        "652459753@qq.com", "mftgsonsmrozbcbh");
                // 后面的字符是授權碼,用qq密碼不行!!
                return pa;
            }
        });
         session.setDebug(true);// 設置打開調試狀態
         try {
            // 聲明一個Message對象(代表一封郵件),從session中創建
            MimeMessage msg = new MimeMessage(session);
            // 郵件信息封裝
            // 1發件人
            msg.setFrom(new InternetAddress("652459753@qq.com"));
            // 2收件人
            msg.setRecipient(RecipientType.TO, new InternetAddress(user.getOB_EMAIL()));
            // 3郵件內容:主題、內容
            msg.setSubject("郵箱注冊橙橙網通知:歡迎注冊***賬號,請點擊鏈接激活賬號");
             // StringBuilder是線程不安全的,但是速度快,這里因為只會有這個線程來訪問,所以可以用這個
            StringBuilder sbd = new StringBuilder();
            sbd.append("橙橙網:<br/>歡迎!請確認此郵件地址以激活您的賬號。<br/>");
            sbd.append("<font color='red'><a href='http://192.168.19.62:8080/Orange_buy/home/register.jsp' target='_blank'");
            sbd.append(">立即激活</a></font><br/>");
            sbd.append("或者點擊下面鏈接:<br/>");
            sbd.append("http://192.168.19.62:8080/Orange_buy/home/register.jsp <br/>");
            sbd.append("這是一封自動發送的郵件;如果您並未要求但收到這封信件,您不需要進行任何操作。");
             msg.setContent(sbd.toString(), "text/html;charset=utf-8");// 發html格式的文本
             // 發送動作
            Transport.send(msg);
            
            System.out.println("給" + user.getOB_EMAIL() + "發送郵件成功。");
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
     }
}

 

 

第一步:我們需要在qq郵箱設置授權碼:在設置>賬戶>

 

然后,servlet

//收集參數 
            String pwd = request.getParameter("pwd");
            String emails = request.getParameter("email");
            if(user!=null){
                //發送激活郵件
                //這里有一個小知識點,必須新開一個線程來發郵件,不能把發郵件的動作寫在這里
                //如果寫在這里,用戶的前台顯示會等待過長時間,不好!
                new Sendmail(user).start();
                System.out.println("您已經注冊成功,請去郵箱激活賬號后再進行登錄,如果沒有收到郵件,請稍等!<br/>");    
            }else{
                System.out.println("很抱歉,服務器繁忙,注冊失敗,需要重新注冊!");
            }
              //添加郵箱
            user.setOB_EMAIL(emails);
            //把MD5加密的放到實體類中去
            user.setOB_PASSWORD(md5.getkeyBeanofStr(pwd));
            //類型
            user.setOB_TYPE(1);
            try {
                int emailadd = service.EmailAdd(user);
                if (emailadd>0) {
                    request.getRequestDispatcher("/home/Loginsuccess.jsp").forward(request, response);
                }
            } catch (Exception e) {
            
                e.printStackTrace();
            }
            /**
             *用戶的登錄
             */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM