java spring 开启SMTP服务发送QQ邮件

首先进入自己的QQ邮箱,在设置中修改账户信息

java spring 开启SMTP服务发送QQ邮件_第1张图片

然后来至底部
java spring 开启SMTP服务发送QQ邮件_第2张图片

点击开启,再用手机发送对应信息到指定号码,然后点击我已发送
java spring 开启SMTP服务发送QQ邮件_第3张图片

获取授权码
java spring 开启SMTP服务发送QQ邮件_第4张图片
注意提示:授权码

到这里,相信你已经开通了SMTP服务,这样就可以在java code发送邮件了


接下来的是Spring 中使用邮件服务

首先是配置信息使用的是587端口,刚开始用465端口我纠结了好久(使用465端口的错误详情),用不了,你可以尝试,默认的25端口应该也是不适合的

    
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="smtp.qq.com"/>
        <property name="port" value="587"/>//或许你可以用465端口,默认的25不适合
        <property name="protocol" value="smtp"/>
        <property name="username" value="[email protected]"/>
        <property name="password" value="xxxxxxxxxxxx"/>//这里的是你通过短信后,获取的授权码
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="javaMailProperties">  
            <props>  
                <prop key="mail.smtp.auth">trueprop> 
                <prop key="mail.smtp.timeout">25000prop>  
            props>  
        property>  

    bean>

    
    <bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
        <property name="from" value="[email protected]"/>
        <property name="subject" value="尝试发邮件"/>
    bean>

    <bean id="orderManager" class="cn.cherish.common.SimpleOrderManager">
        <property name="mailSender" ref="mailSender"/>
        <property name="templateMessage" ref="templateMessage"/>
    bean>

用maven引入的jar包

    
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-context-supportartifactId>
        <version>${spring.version}version>
    dependency>

    <dependency>
        <groupId>javax.mailgroupId>
        <artifactId>mailartifactId>
        <version>1.4.7version>
    dependency>

下面只是一个工具类作简单例子,请勿见怪

package cn.cherish.common;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

/**
 * 项目名称:springmvc_hibernate
 * 类名称:MailUtil
 * 类描述:
 * 创建人:Cherish
 * 联系方式:[email protected]
 * 创建时间:2016年4月22日 下午3:51:48
 * @version 1.0
 */
public class MailUtil {

    private static final String HOST = "smtp.qq.com";
    private static final String SMTP = "smtp";
    private static final String USERNAME = "[email protected]";
    private static final String PASSWORD = "xxxxxxxxxx";
    private static final int PORT = 587;//587/465
    private static final String DEFAULTENCODING = "UTF-8";

    private static JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();

    private static Properties prop = new Properties();

    static{
        // 设定mail server
        senderImpl.setHost(HOST);
        senderImpl.setProtocol(SMTP);
        senderImpl.setUsername(USERNAME);
        senderImpl.setPassword(PASSWORD);
        senderImpl.setPort(PORT);
        senderImpl.setDefaultEncoding(DEFAULTENCODING);

        // 设定properties
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.timeout", "25000");
        //设置调试模式可以在控制台查看发送过程
        prop.put("mail.debug", "true");

        senderImpl.setJavaMailProperties(prop);
    }

    public static void main(String args[]) {
        // 设置收件人,寄件人 用数组发送多个邮件
//      String[] array = new String[] {"[email protected]","[email protected]","[email protected]",USERNAME};
        String[] array = new String[] {USERNAME};
        String subject = "Cherish内嵌图片、音乐的邮件";

//      StringBuffer sb = new StringBuffer();
//      try {
//          URL url = new URL("http://www.imooc.com/");//http://android-studio.org/
//          
//          URLConnection conn = url.openConnection();
//          InputStream is = conn.getInputStream();
//          
//          BufferedReader reader = new BufferedReader(new InputStreamReader(is));
//          
//          String string = null;
//          while ((string = reader.readLine()) != null) {
//              sb.append(string);
//          }
//          
//          //System.out.println(sb.toString());
//          
//      } catch (Exception e) {
//          e.printStackTrace();
//      }
//      
//      boolean result = htmlMail(array, subject, sb.toString());

        String filePath = "E:/javaxmail.png";
        String html = ""+
                    ""+
                    ""+
                    "

Hello,Nice to meet you!

"
+ "并摸了一把你的小奶"+ ""+ ""; boolean result = inlineFileMail(array, subject, html, filePath); if (result) { System.out.println("发送邮件成功。。。。"); } } /** * 发送简单邮件 * @param to 收件人邮箱 * @param subject 主题 * @param content 内容 * @return */ public static boolean singleMail(String to, String subject, String content){ String[] array = new String[] {to}; return singleMail(array, subject, content); } /** * 发送简单文本邮件 * @param to 收件人邮箱数组 * @param subject 主题 * @param content 内容 * @return */ public static boolean singleMail(String[] to, String subject, String content){ boolean result = true; SimpleMailMessage mailMessage = new SimpleMailMessage(); // 设置收件人,寄件人 用数组发送多个邮件 mailMessage.setTo(to); mailMessage.setFrom(USERNAME); mailMessage.setSubject(subject); mailMessage.setText(content); // 发送邮件 try { senderImpl.send(mailMessage); } catch (MailException e) { e.printStackTrace(); result = false; } return result; } /** * 发送html邮件 * @param to 收件人 * @param subject 主题 * @param html html代码 * @return */ public static boolean htmlMail(String[] to, String subject, String html){ boolean result = true; MimeMessage mailMessage = senderImpl.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage); try { // 设置收件人,寄件人 用数组发送多个邮件 messageHelper.setTo(to); messageHelper.setFrom(USERNAME); messageHelper.setSubject(subject); // true 表示启动HTML格式的邮件 messageHelper.setText(html, true); // 发送邮件 senderImpl.send(mailMessage); } catch (MessagingException e) { result = false; e.printStackTrace(); } return result; } /** * 发送内嵌图片的邮件 (cid:资源名) * @param to 收件人邮箱 * @param subject 主题 * @param html html代码 * @param imgPath 图片路径 * @return */ public static boolean inlineFileMail(String[] to, String subject, String html, String filePath){ boolean result = true; MimeMessage mailMessage = senderImpl.createMimeMessage(); try { //设置true开启嵌入图片的功能 MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true); // 设置收件人,寄件人 用数组发送多个邮件 messageHelper.setTo(to); messageHelper.setFrom(USERNAME); messageHelper.setSubject(subject); // true 表示启动HTML格式的邮件 messageHelper.setText(html, true); FileSystemResource file = new FileSystemResource(new File(filePath)); messageHelper.addInline(file.getFilename(), file); // 发送邮件 senderImpl.send(mailMessage); } catch (MessagingException e) { result = false; e.printStackTrace(); } return result; } /** * 发送带附件的邮件 * @param to * @param subject * @param html * @param filePath * @return */ public static boolean attachedFileMail(String[] to, String subject, String html, String filePath){ boolean result = true; MimeMessage mailMessage = senderImpl.createMimeMessage(); try { // multipart模式 为true时发送附件 可以设置html格式 MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"utf-8"); // 设置收件人,寄件人 用数组发送多个邮件 messageHelper.setTo(to); messageHelper.setFrom(USERNAME); messageHelper.setSubject(subject); // true 表示启动HTML格式的邮件 messageHelper.setText(html, true); FileSystemResource file = new FileSystemResource(new File(filePath)); // 这里的方法调用和插入图片是不同的。 messageHelper.addAttachment(file.getFilename(), file); // 发送邮件 senderImpl.send(mailMessage); } catch (MessagingException e) { result = false; e.printStackTrace(); } return result; } }

温馨提示:

'cid:javaxmail.png'>
这是内嵌图片的方式 javaxmail.png 要和 messageHelper.addInline(file.getFilename(), file); 这里的 file.getFilename() 相一致就可以显示

现在只差一步了,那就是Ctrl + F11,有不当之处敬请提出,共同进步
java spring 开启SMTP服务发送QQ邮件_第5张图片

**

使用javax.mail发邮件代码

**

package cn.cherish.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

/**
 * 项目名称:springmvc_hibernate 
 * 类名称:EmailUtil 
 * 类描述:发送邮件工具类 
 * 创建人:Cherish
 * 联系方式:[email protected] 
 * 创建时间:2016年4月23日 上午9:48:21
 * @version 1.0
 */
public class EmailUtil {

    // properties配置文件地址
    //private static final String PROPERTIES_PATH = "standard_data.properties";

    private static Session session;
    private static Properties props = new Properties();
    private static final String HOST = "smtp.qq.com";
    private static int PORT = 587;
    private static final String isAUTH = "true";
    private static final String FROM = "[email protected]";

    private static final String USERNAME = "[email protected]";
    private static final String PASSWORD = "xxxxxxxxxxxxxxxx";

    private static final String TIMEOUT = "25000";
    private static final String DEBUG = "true";

    // 初始化session
    static {
        props.put("mail.smtp.host", HOST);
        props.put("mail.smtp.port", PORT);
        props.put("mail.smtp.auth", isAUTH);
        props.put("fromer", FROM);
        props.put("username", USERNAME);
        props.put("password", PASSWORD);
        props.put("mail.smtp.timeout", TIMEOUT);
        props.put("mail.debug", DEBUG);

        session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(USERNAME, PASSWORD);
            }
        });
    }

    public static void main(String[] args) {
        try {
            String html = ""+
                    ""+
                    ""+
                    "+
                    ""+
                    "Your browser does not support the video tag."+
                    ""+
                    "

Hello,nice to fuck you!

"
+ "并抓了一把你的小鸡鸡"+ ""; //sendEmail("[email protected]", "yeah", html, true); sendFileEmail("[email protected]", "yeah", html, new File("E:/xiaoming.zip")); } catch (Exception e) { e.printStackTrace(); } } /** * * @Title sendEmail * @Description 通过isHtml判断发送的邮件的内容 * @param to 邮件接收者 * @param content 邮件内容 * @param isHtml 是否发送html * @throws MessagingException * @throws IOException * @throws FileNotFoundException * @throws EmailException */ public static void sendEmail(String to, String title, String content, boolean isHtml) throws FileNotFoundException, IOException, MessagingException { String fromer = props.getProperty("fromer"); if (isHtml) { sendHtmlEmail(fromer, to, title, content); } else { sendTextEmail(fromer, to, title, content); } } // 发送纯文字邮件 public static void sendTextEmail(String from, String to, String subject, String content) throws FileNotFoundException, IOException, MessagingException { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject(subject); message.setText(content); message.setSentDate(new Date()); Transport.send(message); } // 发送有HTML格式邮件 public static void sendHtmlEmail(String from, String to, String subject, String htmlConent) throws FileNotFoundException, IOException, MessagingException { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject(subject); message.setSentDate(new Date()); Multipart multi = new MimeMultipart(); BodyPart html = new MimeBodyPart(); html.setContent(htmlConent, "text/html; charset=utf-8"); multi.addBodyPart(html); message.setContent(multi); Transport.send(message); } // 发送带附件的邮件 public static void sendFileEmail(String to, String subject, String htmlConent, File attachment) throws FileNotFoundException, IOException, MessagingException { Message message = new MimeMessage(session); String fromer = props.getProperty("fromer"); message.setFrom(new InternetAddress(fromer)); message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject(subject); message.setSentDate(new Date()); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 Multipart multipart = new MimeMultipart(); // 添加邮件正文 BodyPart contentPart = new MimeBodyPart(); contentPart.setContent(htmlConent, "text/html;charset=UTF-8"); multipart.addBodyPart(contentPart); // 添加附件的内容 if (attachment != null) { BodyPart attachmentBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(attachment); attachmentBodyPart.setDataHandler(new DataHandler(source)); // 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定 // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码 // sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); // messageBodyPart.setFileName("=?GBK?B?" + // enc.encode(attachment.getName().getBytes()) + "?="); // MimeUtility.encodeWord可以避免文件名乱码 attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName())); multipart.addBodyPart(attachmentBodyPart); } message.setContent(multipart); Transport.send(message); } }

你可能感兴趣的:(java,spring&boot)