这里以一个用户注册+邮箱激活账号系统来演示传统的方式邮箱方式。
邮箱配置文件:
<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=<a href\=</code><code>"http\://localhost\:8080/User_login_regist_exit/user_active.action?code\={0}"</code><code>>点击这里完成激活</a></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<String, String> errors=</code><code>new</code> <code>HashMap<String, String>();</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() < </code><code>3</code> <code>|| username.length() > </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() < </code><code>3</code> <code>|| password.length() > </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() > </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类
<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<AttachBean> attachList = </code><code>new</code> <code>ArrayList<AttachBean>();</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() > </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() > </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() > </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<AttachBean> 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<AttachBean> 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