天天看點

郵箱發送傳統方式

  這裡以一個使用者注冊+郵箱激活賬号系統來示範傳統的方式郵箱方式。

     郵箱配置檔案:

<code>host=smtp.</code><code>163</code><code>.com</code>

<code>uname=</code><code>15581737164</code>

<code>pwd=xxxxx        </code><code>//這裡是郵箱的授權碼,不是登入密碼</code>

<code>from=</code><code>15511111111</code><code>@163</code><code>.com</code>

<code>subject=這是來自</code><code>15511111111</code><code>@163</code><code>.com郵箱的激活檔案</code>

<code>content=&lt;a href\=</code><code>"http\://localhost\:8080/User_login_regist_exit/user_active.action?code\={0}"</code><code>&gt;點選這裡完成激活&lt;/a&gt;</code>

<code>code\={</code><code>0</code><code>}:是一個占位符</code>

注冊的web層代碼:

<code>public</code> <code>String regist(){</code>

<code>        </code><code>HttpServletRequest request=ServletActionContext.getRequest();</code>

<code>        </code><code>Map&lt;String, String&gt; errors=</code><code>new</code> <code>HashMap&lt;String, String&gt;();</code>

<code>        </code> 

<code>        </code><code>user.setCode(CommonUtils.uuid()+CommonUtils.uuid());</code>

<code>        </code><code>user.setState(</code><code>false</code><code>);</code>

<code>        </code><code>//檢查使用者名</code>

<code>        </code><code>String username=user.getUsername();</code>

<code>        </code><code>if</code><code>(username == </code><code>null</code> <code>|| username.trim().isEmpty()) {</code>

<code>            </code><code>errors.put(</code><code>"username"</code><code>, </code><code>"使用者名不能為空!"</code><code>);</code>

<code>        </code><code>} </code><code>else</code> <code>if</code><code>(username.length() &lt; </code><code>3</code> <code>|| username.length() &gt; </code><code>10</code><code>) {</code>

<code>            </code><code>errors.put(</code><code>"username"</code><code>, </code><code>"使用者名長度必須在3~10之間!"</code><code>);</code>

<code>        </code><code>}</code>

<code>        </code><code>//檢查密碼</code>

<code>        </code><code>String password = user.getPassword();</code>

<code>        </code><code>if</code><code>(password == </code><code>null</code> <code>|| password.trim().isEmpty()) {</code>

<code>            </code><code>errors.put(</code><code>"password"</code><code>, </code><code>"密碼不能為空!"</code><code>);</code>

<code>        </code><code>} </code><code>else</code> <code>if</code><code>(password.length() &lt; </code><code>3</code> <code>|| password.length() &gt; </code><code>10</code><code>) {</code>

<code>            </code><code>errors.put(</code><code>"password"</code><code>, </code><code>"密碼長度必須在3~10之間!"</code><code>);</code>

<code>        </code><code>//檢查郵箱</code>

<code>        </code><code>String email = user.getEmail();</code>

<code>        </code><code>if</code><code>(email == </code><code>null</code> <code>|| email.trim().isEmpty()) {</code>

<code>            </code><code>errors.put(</code><code>"email"</code><code>, </code><code>"Email不能為空!"</code><code>);</code>

<code>        </code><code>} </code><code>else</code> <code>if</code><code>(!email.matches(</code><code>"\\w+@\\w+\\.\\w+"</code><code>)) {</code>

<code>            </code><code>errors.put(</code><code>"email"</code><code>, </code><code>"Email格式錯誤!"</code><code>);</code>

<code>        </code><code>if</code><code>(errors.size() &gt; </code><code>0</code><code>) {</code>

<code>            </code><code>request.setAttribute(</code><code>"errors"</code><code>, errors);</code>

<code>            </code><code>request.setAttribute(</code><code>"form"</code><code>, user);</code>

<code>            </code><code>return</code> <code>"regist"</code><code>;</code>

<code>        </code><code>//進行資料庫操作</code>

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>userService.regist(user);</code>

<code>        </code><code>} </code><code>catch</code> <code>(UserException e) {</code>

<code>            </code><code>request.setAttribute(</code><code>"msg"</code><code>, e.getMessage());</code>

<code>        </code><code>//發送郵件</code>

<code>        </code><code>Properties props = </code><code>new</code> <code>Properties();</code>

<code>            </code><code>props.load(</code><code>this</code><code>.getClass().getClassLoader()</code>

<code>                    </code><code>.getResourceAsStream(</code><code>"email_template.properties"</code><code>));</code>

<code>        </code><code>} </code><code>catch</code> <code>(IOException e1) {</code>

<code>            </code><code>e1.printStackTrace();</code>

<code>        </code><code>String host = props.getProperty(</code><code>"host"</code><code>);</code><code>//擷取伺服器主機</code>

<code>        </code><code>String uname = props.getProperty(</code><code>"uname"</code><code>);</code><code>//擷取使用者名</code>

<code>        </code><code>String pwd = props.getProperty(</code><code>"pwd"</code><code>);</code><code>//擷取密碼</code>

<code>        </code><code>String from = props.getProperty(</code><code>"from"</code><code>);</code><code>//擷取發件人</code>

<code>        </code><code>String to = user.getEmail();</code><code>//擷取收件人</code>

<code>        </code><code>String subject = props.getProperty(</code><code>"subject"</code><code>);</code><code>//擷取主題</code>

<code>        </code><code>String content = props.getProperty(</code><code>"content"</code><code>);</code><code>//擷取郵件内容</code>

<code>        </code><code>content = MessageFormat.format(content, user.getCode());</code><code>//替換{0}</code>

<code>        </code><code>Session session=MailUtils.createSession(host, uname, pwd);</code>

<code>        </code><code>Mail mail=</code><code>new</code> <code>Mail(from,to,subject,content);</code>

<code>            </code><code>MailUtils.send(session, mail);</code>

<code>        </code><code>} </code><code>catch</code> <code>(MessagingException e) {</code>

<code>            </code><code>// TODO Auto-generated catch block</code>

<code>            </code><code>e.printStackTrace();</code>

<code>        </code><code>} </code><code>catch</code> <code>(IOException e) {</code>

<code>        </code><code>request.setAttribute(</code><code>"msg"</code><code>, </code><code>"恭喜,注冊成功,請馬上到郵箱激活"</code><code>);</code>

<code>        </code><code>return</code> <code>"registsuccess"</code><code>;</code>

<code>    </code><code>}</code>

已經編寫好的utils類

    Mail

<code>public</code> <code>class</code> <code>Mail {</code>

<code>    </code><code>private</code> <code>String from;</code><code>//發件人</code>

<code>    </code><code>private</code> <code>StringBuilder toAddress = </code><code>new</code> <code>StringBuilder();</code><code>//收件人</code>

<code>    </code><code>private</code> <code>StringBuilder ccAddress = </code><code>new</code> <code>StringBuilder();</code><code>//抄送</code>

<code>    </code><code>private</code> <code>StringBuilder bccAddress = </code><code>new</code> <code>StringBuilder();</code><code>//暗送</code>

<code>    </code> 

<code>    </code><code>private</code> <code>String subject;</code><code>//主題</code>

<code>    </code><code>private</code> <code>String content;</code><code>//正文</code>

<code>    </code><code>// 附件清單</code>

<code>    </code><code>private</code> <code>List&lt;AttachBean&gt; attachList = </code><code>new</code> <code>ArrayList&lt;AttachBean&gt;();</code>

<code>    </code><code>public</code> <code>Mail() {}</code>

<code>    </code><code>public</code> <code>Mail(String from, String to) {</code>

<code>        </code><code>this</code><code>(from, to, </code><code>null</code><code>, </code><code>null</code><code>);</code>

<code>    </code><code>public</code> <code>Mail(String from, String to, String subject, String content) {</code>

<code>        </code><code>this</code><code>.from = from;</code>

<code>        </code><code>this</code><code>.toAddress.append(to);</code>

<code>        </code><code>this</code><code>.subject = subject;</code>

<code>        </code><code>this</code><code>.content = content;</code>

<code>    </code><code>/**</code>

<code>     </code><code>* 傳回發件人</code>

<code>     </code><code>* @return</code>

<code>     </code><code>*/</code>

<code>    </code><code>public</code> <code>void</code> <code>setFrom(String from) {</code>

<code>    </code><code>public</code> <code>String getFrom() {</code>

<code>        </code><code>return</code> <code>from;</code>

<code>     </code><code>* 傳回主題</code>

<code>    </code><code>public</code> <code>String getSubject() {</code>

<code>        </code><code>return</code> <code>subject;</code>

<code>     </code><code>* 設定主題</code>

<code>    </code><code>public</code> <code>void</code> <code>setSubject(String subject) {</code>

<code>     </code><code>* 擷取主題内容</code>

<code>    </code><code>public</code> <code>String getContent() {</code>

<code>        </code><code>return</code> <code>content;</code>

<code>     </code><code>* 設定主題内容</code>

<code>     </code><code>* @param content</code>

<code>    </code><code>public</code> <code>void</code> <code>setContent(String content) {</code>

<code>     </code><code>* 擷取收件人</code>

<code>    </code><code>public</code> <code>String getToAddress() {</code>

<code>        </code><code>return</code> <code>toAddress.toString();</code>

<code>     </code><code>* 擷取抄送</code>

<code>    </code><code>public</code> <code>String getCcAddress() {</code>

<code>        </code><code>return</code> <code>ccAddress.toString();</code>

<code>     </code><code>* 擷取暗送</code>

<code>    </code><code>public</code> <code>String getBccAddress() {</code>

<code>        </code><code>return</code> <code>bccAddress.toString();</code>

<code>     </code><code>* 添加收件人,可以是多個收件人</code>

<code>     </code><code>* @param to</code>

<code>    </code><code>public</code> <code>void</code> <code>addToAddress(String to) {</code>

<code>        </code><code>if</code><code>(</code><code>this</code><code>.toAddress.length() &gt; </code><code>0</code><code>) {</code>

<code>            </code><code>this</code><code>.toAddress.append(</code><code>","</code><code>);</code>

<code>     </code><code>* 添加抄送人,可以是多個抄送人</code>

<code>     </code><code>* @param cc</code>

<code>    </code><code>public</code> <code>void</code> <code>addCcAddress(String cc) {</code>

<code>        </code><code>if</code><code>(</code><code>this</code><code>.ccAddress.length() &gt; </code><code>0</code><code>) {</code>

<code>            </code><code>this</code><code>.ccAddress.append(</code><code>","</code><code>);</code>

<code>        </code><code>this</code><code>.ccAddress.append(cc);</code>

<code>     </code><code>* 添加暗送人,可以是多個暗送人</code>

<code>     </code><code>* @param bcc</code>

<code>    </code><code>public</code> <code>void</code> <code>addBccAddress(String bcc) {</code>

<code>        </code><code>if</code><code>(</code><code>this</code><code>.bccAddress.length() &gt; </code><code>0</code><code>) {</code>

<code>            </code><code>this</code><code>.bccAddress.append(</code><code>","</code><code>);</code>

<code>        </code><code>this</code><code>.bccAddress.append(bcc);</code>

<code>     </code><code>* 添加附件,可以添加多個附件</code>

<code>     </code><code>* @param attachBean</code>

<code>    </code><code>public</code> <code>void</code> <code>addAttach(AttachBean attachBean) {</code>

<code>        </code><code>this</code><code>.attachList.add(attachBean);</code>

<code>     </code><code>* 擷取所有附件</code>

<code>    </code><code>public</code> <code>List&lt;AttachBean&gt; getAttachs() {</code>

<code>        </code><code>return</code> <code>this</code><code>.attachList;</code>

<code>}</code>

    MailUtils

<code>public</code> <code>class</code> <code>MailUtils {</code>

<code>    </code><code>public</code> <code>static</code> <code>Session createSession(String host, </code><code>final</code> <code>String username, </code><code>final</code> <code>String password) {</code>

<code>        </code><code>Properties prop = </code><code>new</code> <code>Properties();</code>

<code>        </code><code>prop.setProperty(</code><code>"mail.host"</code><code>, host);</code><code>// 指定主機</code>

<code>        </code><code>prop.setProperty(</code><code>"mail.smtp.auth"</code><code>, </code><code>"true"</code><code>);</code><code>// 指定驗證為true</code>

<code>        </code><code>// 建立驗證器</code>

<code>        </code><code>Authenticator auth = </code><code>new</code> <code>Authenticator() {</code>

<code>            </code><code>public</code> <code>PasswordAuthentication getPasswordAuthentication() {</code>

<code>                </code><code>return</code> <code>new</code> <code>PasswordAuthentication(username, password);</code>

<code>            </code><code>}</code>

<code>        </code><code>};</code>

<code>        </code><code>// 擷取session對象</code>

<code>        </code><code>return</code> <code>Session.getInstance(prop, auth);</code>

<code>     </code><code>* 發送指定的郵件</code>

<code>     </code><code>* </code>

<code>     </code><code>* @param mail</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>send(Session session, </code><code>final</code> <code>Mail mail) </code><code>throws</code> <code>MessagingException,</code>

<code>            </code><code>IOException {</code>

<code>        </code><code>MimeMessage msg = </code><code>new</code> <code>MimeMessage(session);</code><code>// 建立郵件對象</code>

<code>        </code><code>msg.setFrom(</code><code>new</code> <code>InternetAddress(mail.getFrom()));</code><code>// 設定發件人</code>

<code>        </code><code>msg.addRecipients(RecipientType.TO, mail.getToAddress());</code><code>// 設定收件人</code>

<code>        </code><code>// 設定抄送</code>

<code>        </code><code>String cc = mail.getCcAddress();</code>

<code>        </code><code>if</code> <code>(!cc.isEmpty()) {</code>

<code>            </code><code>msg.addRecipients(RecipientType.CC, cc);</code>

<code>        </code><code>// 設定暗送</code>

<code>        </code><code>String bcc = mail.getBccAddress();</code>

<code>        </code><code>if</code> <code>(!bcc.isEmpty()) {</code>

<code>            </code><code>msg.addRecipients(RecipientType.BCC, bcc);</code>

<code>        </code><code>msg.setSubject(mail.getSubject());</code><code>// 設定主題</code>

<code>        </code><code>MimeMultipart parts = </code><code>new</code> <code>MimeMultipart();</code><code>// 建立部件集對象</code>

<code>        </code><code>MimeBodyPart part = </code><code>new</code> <code>MimeBodyPart();</code><code>// 建立一個部件</code>

<code>        </code><code>part.setContent(mail.getContent(), </code><code>"text/html;charset=utf-8"</code><code>);</code><code>// 設定郵件文本内容</code>

<code>        </code><code>parts.addBodyPart(part);</code><code>// 把部件添加到部件集中</code>

<code>        </code><code>///////////////////////////////////////////</code>

<code>        </code><code>// 添加附件</code>

<code>        </code><code>List&lt;AttachBean&gt; attachBeanList = mail.getAttachs();</code><code>// 擷取所有附件</code>

<code>        </code><code>if</code> <code>(attachBeanList != </code><code>null</code><code>) {</code>

<code>            </code><code>for</code> <code>(AttachBean attach : attachBeanList) {</code>

<code>                </code><code>MimeBodyPart attachPart = </code><code>new</code> <code>MimeBodyPart();</code><code>// 建立一個部件</code>

<code>                </code><code>attachPart.attachFile(attach.getFile());</code><code>// 設定附件檔案</code>

<code>                </code><code>attachPart.setFileName(MimeUtility.encodeText(attach</code>

<code>                        </code><code>.getFileName()));</code><code>// 設定附件檔案名</code>

<code>                </code><code>String cid = attach.getCid();</code>

<code>                </code><code>if</code><code>(cid != </code><code>null</code><code>) {</code>

<code>                    </code><code>attachPart.setContentID(cid);</code>

<code>                </code><code>}</code>

<code>                </code><code>parts.addBodyPart(attachPart);</code>

<code>        </code><code>msg.setContent(parts);</code><code>// 給郵件設定内容</code>

<code>        </code><code>Transport.send(msg);</code><code>// 發郵件</code>

版權聲明:原創作品,如需轉載,請與作者聯系。否則将追究法律責任

本文轉自 叫我北北 51CTO部落格,原文連結:http://blog.51cto.com/qinbin/1966857

繼續閱讀