java实现163邮箱发送邮件到qq邮箱成功案例

下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:

package test; 

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import com.sun.mail.util.MailSSLSocketFactory; 

///**
// *
// * @author tuzongxun123
// * @Description 邮件发送测试类
// */
public class sendMailTest {
 public static void main(String[] args) throws Exception {
  // 配置信息
  Properties pro = new Properties();
  pro.put("mail.smtp.host", "smtp.163.com");
  pro.put("mail.smtp.auth", "true");
  // SSL加密
  MailSSLSocketFactory sf = null;
  sf = new MailSSLSocketFactory();
  // 设置信任所有的主机
  sf.setTrustAllHosts(true);
  pro.put("mail.smtp.ssl.enable", "true");
  pro.put("mail.smtp.ssl.socketFactory", sf);
  // 根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了
  //还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码
  MailAuthenticator authenticator = new MailAuthenticator("tuzongxun123",
    "客户端授权码");
  Session session = Session.getInstance(pro, authenticator);
  // 根据Session 构建邮件信息
  Message message = new MimeMessage(session);
  // 创建邮件发送者地址
  Address from = new InternetAddress("tuzongxun123@163.com");
  // 设置邮件消息的发送者
  message.setFrom(from);
  // 验证收件人邮箱地址
  List<String> toAddressList = new ArrayList<>();
  toAddressList.add("1160569243@qq.com");
  StringBuffer buffer = new StringBuffer();
  if (!toAddressList.isEmpty()) {
   String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
   Pattern p = Pattern.compile(regEx);
   for (int i = 0; i < toAddressList.size(); i++) {
    Matcher match = p.matcher(toAddressList.get(i));
    if (match.matches()) {
     buffer.append(toAddressList.get(i));
     if (i < toAddressList.size() - 1) {
      buffer.append(",");
     }
    }
   }
  }
  String toAddress = buffer.toString();
  if (!toAddress.isEmpty()) {
   // 创建邮件的接收者地址
   Address[] to = InternetAddress.parse(toAddress);
   // 设置邮件接收人地址
   message.setRecipients(Message.RecipientType.TO, to);
   // 邮件主题
   // message.setSubject("java邮件测试");
   message.setSubject("为什么错了");
   // 邮件容器
   MimeMultipart mimeMultiPart = new MimeMultipart();
   // 设置HTML
   BodyPart bodyPart = new MimeBodyPart();
   // 邮件内容
   // String htmlText = "java邮件测试111";
   String htmlText = "为什么错了";
   bodyPart.setContent(htmlText, "text/html;charset=utf-8");
   mimeMultiPart.addBodyPart(bodyPart);
   // 添加附件
   List<String> fileAddressList = new ArrayList<String>();
   fileAddressList
     .add("C:\\Users\\tuzongxun123\\Desktop\\新建 Microsoft Office Word 文档.docx");
   if (fileAddressList != null) {
    BodyPart attchPart = null;
    for (int i = 0; i < fileAddressList.size(); i++) {
     if (!fileAddressList.get(i).isEmpty()) {
      attchPart = new MimeBodyPart();
      // 附件数据源
      DataSource source = new FileDataSource(
        fileAddressList.get(i));
      // 将附件数据源添加到邮件体
      attchPart.setDataHandler(new DataHandler(source));
      // 设置附件名称为原文件名
      attchPart.setFileName(MimeUtility.encodeText(source
        .getName()));
      mimeMultiPart.addBodyPart(attchPart);
     }
    }
   }
   message.setContent(mimeMultiPart);
   message.setSentDate(new Date());
   // 保存邮件
   message.saveChanges();
   // 发送邮件
   Transport.send(message);
  }
 }
} 

class MailAuthenticator extends Authenticator { 

 /**
  * 用户名
  */
 private String username;
 /**
  * 密码
  */
 private String password; 

 /**
  * 创建一个新的实例 MailAuthenticator.
  *
  * @param username
  * @param password
  */
 public MailAuthenticator(String username, String password) {
  this.username = username;
  this.password = password;
 } 

 public String getPassword() {
  return password;
 } 

 @Override
 protected PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(username, password);
 } 

 public String getUsername() {
  return username;
 } 

 public void setPassword(String password) {
  this.password = password;
 } 

 public void setUsername(String username) {
  this.username = username;
 } 

} 

注:我有个同事使用我这个代码更换为他的账号和客户端授权码后,一运行就报错,然后重置了一下邮箱的客户端授权码后,错误便消失了。

以上就是本文的全部内容,希望对大家学习java程序设计有所帮助。

(0)

相关推荐

  • Java Mail与Apache Mail发送邮件示例

    一.邮件简介 一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等: 1.收件人:收件人的邮箱地址,例如xxx@xx.com 2.收件人姓名:大部分的邮件显示时都会显示,例如loadfate 779554589@qq.com 3.发件人:发件人的邮箱地址 4.发件人姓名: 5.主题:邮件的标题 6.内容及附件:邮件的主要内容 二.使用Java发邮件的通用步骤 一般的项目中没有单独的邮件服务器,一般情况下都是使用别人的服务器. 1.设置smtp服务器:不同的邮件服务器有不同的地址,

  • java+jsp+struts2实现发送邮件功能

    以下总结是2016/3/23在做一个网站时遇到的一个功能模块,现在将总结从为知笔记上搬家到CSDN,与大家共享,欢迎指正. 0.准备工作 0.1先建立一个web项目,添加struts2开发包 0.2.需要另外导入一下两个jar包 mail.jar,activation.jar,可以自己网上下载,很多的! 以下为详细过程! 1.index.jsp页面 <%@ page language="java" import="java.util.*" pageEncodi

  • java编程实现邮件定时发送的方法

    本文实例讲述了java编程实现邮件定时发送的方法.分享给大家供大家参考,具体如下: 最近做项目时客户提出了一个需求:系统定时发送E-mail到其客户,达到通知的效果.先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声! 首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask) 如: 每隔一个小时执行任务 timer.schedule(TimerTask,

  • Java HtmlEmail 邮件发送的简单实现代码

    Java 项目中常常回遇到发送邮件 Java 发送邮件有几种,今天先给大家介绍用 HtmlEmail 来发送邮件,我这里是用 Maven 来搭建的 HtmlEmail 可以抄带HTML 首先 需要导入jar 包 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</versio

  • java中javamail发送带附件的邮件实现方法

    本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输,JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载.目前最新版本是JavaMail1.5.0,下面我们来看看javamail发送带附件的邮件实例 mail.java 代码: 复制代码 代码如下: package mail;

  • java实现基于SMTP发送邮件的方法

    本文实例讲述了java实现基于SMTP发送邮件的方法.分享给大家供大家参考.具体实现方法如下: import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Tra

  • Java邮件发送程序(可以同时发给多个地址、可以带附件)

    发送邮件的主程序 import java.util.Properties; import common.util.Email_Autherticatorbean; import javax.mail.Authenticator; import javax.mail.internet.InternetAddress; import org.apache.commons.lang.StringUtils; import javax.mail.internet.MimeBodyPart; import

  • Java程序中使用JavaMail发送带图片和附件的邮件

    我们常常在邮件中添加附件,以达到传输较大文件的目的.而上一篇文章只是将本机的一张图片内嵌到邮件的 HTML 格式的正文当中,这样的邮件显得不够丰富多彩.我们想要一封正文部分图文并茂,而游客附带若干附件的邮件. 下面是代码结构中3个重要的方法: MimeBodyPart createAttachment(String fileName) 方法用于创建附件并返回: MimeBodyPart createContent(String body, String fileName) 方法用于创建正文部分并

  • java 发送邮件的实例代码(可移植)

    以一个web项目为例,代码是可以移植的 首先要导入mail.jar包,然后创建自己的类 1:HTMLSender类 复制代码 代码如下: package com.txq.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.Sess

  • Java基于JavaMail实现向QQ邮箱发送邮件

    最近项目在做新闻爬虫,想实现这个功能:爬虫某个页面失败后,把这个页面的 url 发到邮箱.最终实现的效果图如下,后期可以加上过滤标签.失败状态码等,方便分类搜索异常. 开发人员可以根据邮件里的 url 和堆栈信息,分析爬虫失败的原因. 是不是服务器 down 了? 还是爬虫的 Dom 解析没有解析到内容? 还是正则表达式对于这个页面不适用? 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 注意开启完之后,QQ 邮箱会生成一个授权码,在代码里连接邮箱使用这个授权码而不是原

随机推荐