下面代码可以实现普通qq邮箱发送邮件的功能,可以传附件,但是是固定的附件:
需要两个jar包:mail.jar,activation.jar
mail.jar 下载地址:
http://java.sun.com/products/javamail/downloads/index.html
activation.jar 下载地址:
http://java.sun.com/products/javabeans/jaf/downloads/index.html
必须要在qq邮箱中获得第三方登录授权码:
代码:
/** * 发送邮件(可以携带附件) * @param to 收件人 */ public void sendMessage(String to) { // 发件人电子邮箱 String from = "XXXXXXXXX@qq.com"; // 发件人电子邮箱密码(此为QQ邮箱第三方客户端登录授权码) String password = "**********"; // 指定发送邮件的主机为 String host = "smtp.qq.com"; // 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("mail.smtp.host", host); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.port", "465"); properties.put("mail.smtp.socketFactory.port", "465"); properties.put("mail.smtp.auth", true); // 获取默认session对象 Session session = Session.getDefaultInstance(properties,new Authenticator(){ public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、密码 return new PasswordAuthentication("XXXXXXXXX@qq.com", "**********"); } }); //设置获取debug信息 session.setDebug(true); try{ // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // Set From: 头部头字段(发件人) message.setFrom(new InternetAddress(from)); // Set To: 头部头字段(收件人) message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); // Set Subject: 头部头字段(邮件主题) message.setSubject("测试邮件!"); // 设置消息体 message.setText("这是一个测试邮件"); //读取附件 try { // 设置一个超文本对象 Multipart multipart = new MimeMultipart(); // 设置一个超文本的内容对象 BodyPart bodyPart; // 创建一个文件读取对象,从文件路径将文件读取出来 File file = new File("D:/****.docx"); // 判断文件不存在则抛出异常 if(!file.exists()){ throw new IOException("文件不存在!请确定文件路径是否正确"); } bodyPart = new MimeBodyPart(); // 创建一个文件数据对象来管理文件数据 DataSource dataSource = new FileDataSource(file); // 将文件数据设置成统一的数据然后设置为bodyPart的数据 bodyPart.setDataHandler(new DataHandler(dataSource)); //文件名要加入编码,不然出现乱码 bodyPart.setFileName(MimeUtility.encodeText(file.getName())); // 将bodyPart设置为附件的内容 multipart.addBodyPart(bodyPart); //将附件加入邮件中 message.setContent(multipart); } catch (Exception e) { e.printStackTrace(); } // 获得transport示例对象 Transport transport = session.getTransport("smtp"); // 打开连接 transport.connect(host, from, password); // 将message对象传递给transport对象,将邮件发送出去 transport.sendMessage(message, message.getAllRecipients()); // 关闭传输对象 transport.close(); System.out.println("Sent message successfully...."); }catch (MessagingException mex) { mex.printStackTrace(); } }