Java教程

java实战:邮件群发推广微信公众号(一),内含java操作excel及java操作mysql

本文主要是介绍java实战:邮件群发推广微信公众号(一),内含java操作excel及java操作mysql,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

      零零散散利用业余时间带着看了一阵子java,是时候用实际应用来练练手了。应一个朋友需求,想通过邮件群发方式推广自己的公众号,为啥用邮件推广嘛,大家都清楚:免费。现在找个媒体发广告,那可是要投入成本的,最终效果还不一定有效。邮件现在效果远不如以前,但毕竟免费。

      一、需求分析与功能模块定位

      首先要解决同一个发件人发很多邮件后被邮件服务器屏蔽的问题,思路就是准备一批发邮件账号,充分利用各个环节随机的做法来规避邮件服务器的屏蔽,每个发件人账号每天发送有限的几封邮件,把每天定时任务的发送起始时间随机化,每个账号发送上限数量内随机数量邮件,发送间隔随机产生,邮件标题随机从数据库读取,邮件内容随机从数据库读取,反正一切都是在预先设定的范围内随机。

      这个思路定下来之后,要准备的工作有:1、先写个邮件发送的类,用于被调用;2、准备发件人邮箱账号,越多越好,存放在excel表中,规定格式;3、准备数据库,存放收件人目标邮箱账号,存放随机读取的邮件标题和邮件内容,目标邮箱如何产生嘛,以qq号为例,挨个排下去,自行理解。

      二、分步实现之邮件发送类

      1、引入mail.jar和activateon.jar两个jar包,idea开发环境中,使用maven管理,pom.xml依赖中添加:

    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.7</version>
    </dependency>

    <dependency>
      <groupId>javax.activation</groupId>
      <artifactId>activation</artifactId>
      <version>1.1.1</version>
    </dependency>

      2、SendMailSmtp类

/*
 * Class Name: SendMailSmtp
 * Description: 使用smtp协议发送邮件,依赖两个jar包:mail,activation;导入import javax.activation.,import javax.mail.
 *     四类发送方式,只发送文本,发送文本和图片,发送文本和附件,发送文本、图片、附件,附件只支持一个。
 *     使用方法,先GetTransport()创建与邮件服务器连接,然后Sendxxxx()发送邮件,最后CloseTransport()关闭连接。
 * Date: 2021-09-03 13:30
 * Copyright: 秦坤明
 */

package QinMing.Mail;

import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Random;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
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 javax.mail.internet.MimeUtility;

public class SendMailSmtp {

    String MailSmtpServer;
    String MailUser;
    String MailPass;
    String MailSender;
    Session session;
    Transport ts;

    public String getMailSmtpServer() {
        return MailSmtpServer;
    }

    public void setMailSmtpServer(String mailSmtpServer) {
        MailSmtpServer = mailSmtpServer;
    }

    public String getMailUser() {
        return MailUser;
    }

    public void setMailUser(String mailUser) {
        MailUser = mailUser;
    }

    public String getMailPass() {
        return MailPass;
    }

    public void setMailPass(String mailPass) {
        MailPass = mailPass;
    }

    public String getMailSender() {
        return MailSender;
    }

    public void setMailSender(String mailSender) {
        MailSender = mailSender;
    }

    /*
     *连接smtp邮件服务器
     */
    public String GetTransport() {

        try {
            Properties ppt = new Properties();
            ppt.setProperty("mail.host", MailSmtpServer);
            ppt.setProperty("mail.transport.protocol", "smtp");
            ppt.setProperty("mail.smtp.auth", "true");

            //1、创建session
            session = Session.getInstance(ppt);
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            //session.setDebug(true);

            //2、通过session得到transport对象
            ts = session.getTransport();

            //3、连上邮件服务器
            ts.connect(MailSmtpServer, MailUser, MailPass);

            return "success";
        }catch (MessagingException e){
            return e.toString();
        }
    }

    /*
     *断开与smtp邮件服务器的连接
     */
    public String CloseTransport() {

        try {
            //5、断开与邮件服务器连接
            ts.close();
            return "success";
        }catch (MessagingException e){
            return e.toString();
        }

    }

    /*
     *通过smtp邮件服务器发送文本/html格式邮件,不带图片和附件
     * @MailReceiver 收件人
     * @MailSubject 邮件主题
     * @MailContent 邮件内容
     */
    public String SendText(String MailReceiver, String MailSubject, String MailContent){

        try {
            //4、创建邮件对象并发送邮件
            MimeMessage mm = new MimeMessage(session);
            //指明邮件的发件人
            mm.setFrom(new InternetAddress(MailSender));
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            mm.setRecipient(Message.RecipientType.TO, new InternetAddress(MailReceiver));
            //邮件的标题
            mm.setSubject(MailSubject);
            //邮件的文本内容
            mm.setContent(MailContent, "text/html;charset=UTF-8");
            //发送邮件
            ts.sendMessage(mm, mm.getAllRecipients());
            //发送成功返回success
            return "success";
        }
        catch(MessagingException e){
            return e.toString();
        }

    }

    /*
     *通过smtp邮件服务器发送文本/html格式邮件,带图片
     * @MailReceiver 收件人
     * @MailSubject 邮件主题
     * @MailContent 邮件内容
     * @ImageFile 图片文件
     */
    public String SendImage(String MailReceiver, String MailSubject, String MailContent, String ImageFile){

        try {
            //4、创建邮件对象并发送邮件
            MimeMessage mm = new MimeMessage(session);
            //指明邮件的发件人
            mm.setFrom(new InternetAddress(MailSender));
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            mm.setRecipient(Message.RecipientType.TO, new InternetAddress(MailReceiver));
            //邮件的标题
            mm.setSubject(MailSubject);

            // 准备邮件相关
            // 准备邮件正文数据,图片指定名称需和下面image.setContentID中命名的保持一致
            MimeBodyPart text = new MimeBodyPart();
            text.setContent(MailContent + "<img src='cid:welcome.jpg'>", "text/html;charset=UTF-8");
            // 准备图片数据
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(ImageFile));
            image.setDataHandler(dh);
            image.setContentID("welcome.jpg");
            // 描述数据关系
            MimeMultipart mmt = new MimeMultipart();
            mmt.addBodyPart(text);
            mmt.addBodyPart(image);
            mmt.setSubType("related");

            mm.setContent(mmt);
            mm.saveChanges();

            //发送邮件
            ts.sendMessage(mm, mm.getAllRecipients());
            //发送成功返回success
            return "success";
        }
        catch(MessagingException e){
            return e.toString();
        }

    }

    /*
     *通过smtp邮件服务器发送文本/html格式邮件,带附件
     * @MailReceiver 收件人
     * @MailSubject 邮件主题
     * @MailContent 邮件内容
     * @AttachFile 附件文件
     */
    public String SendAttach(String MailReceiver, String MailSubject, String MailContent, String AttachFile){

        try {
            //4、创建邮件对象并发送邮件
            MimeMessage mm = new MimeMessage(session);
            //指明邮件的发件人
            mm.setFrom(new InternetAddress(MailSender));
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            mm.setRecipient(Message.RecipientType.TO, new InternetAddress(MailReceiver));
            //邮件的标题
            mm.setSubject(MailSubject);

            // 准备邮件相关
            // 准备邮件正文数据,图片指定名称需和下面image.setContentID中命名的保持一致
            MimeBodyPart text = new MimeBodyPart();
            text.setContent(MailContent, "text/html;charset=UTF-8");
            //创建邮件附件
            MimeBodyPart attach = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(AttachFile));
            attach.setDataHandler(dh);
            attach.setFileName(dh.getName());
            // 描述数据关系
            MimeMultipart mmt = new MimeMultipart();
            mmt.addBodyPart(text);
            mmt.addBodyPart(attach);
            mmt.setSubType("mixed");

            mm.setContent(mmt);
            mm.saveChanges();

            //发送邮件
            ts.sendMessage(mm, mm.getAllRecipients());
            //发送成功返回success
            return "success";
        }
        catch(MessagingException e){
            return e.toString();
        }

    }

    /*
     *通过smtp邮件服务器发送文本/html格式邮件,带附件
     * @MailReceiver 收件人
     * @MailSubject 邮件主题
     * @MailContent 邮件内容
     * @ImageFile 图片文件
     * @AttachFile 附件文件
     */
    public String SendImageAndAttach(String MailReceiver, String MailSubject, String MailContent, String ImageFile, String AttachFile){

        try {
            //4、创建邮件对象并发送邮件
            MimeMessage mm = new MimeMessage(session);
            //指明邮件的发件人
            mm.setFrom(new InternetAddress(MailSender));
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            mm.setRecipient(Message.RecipientType.TO, new InternetAddress(MailReceiver));
            //邮件的标题
            mm.setSubject(MailSubject);

            //准备邮件相关
            //正文
            MimeBodyPart text = new MimeBodyPart();
            text.setContent(MailContent + "<img src='cid:welcome.jpg'>", "text/html;charset=UTF-8");

            //图片
            MimeBodyPart image = new MimeBodyPart();
            image.setDataHandler(new DataHandler(new FileDataSource(ImageFile)));
            image.setContentID("welcome.jpg");

            //附件
            MimeBodyPart attach = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource(AttachFile));
            attach.setDataHandler(dh);
            attach.setFileName(dh.getName());

            //描述关系:正文和图片
            MimeMultipart mmt1 = new MimeMultipart();
            mmt1.addBodyPart(text);
            mmt1.addBodyPart(image);
            mmt1.setSubType("related");

            //描述关系:正文和附件
            MimeMultipart mmt2 = new MimeMultipart();
            mmt2.addBodyPart(attach);

            //代表正文的body part
            MimeBodyPart content = new MimeBodyPart();
            content.setContent(mmt1);
            mmt2.addBodyPart(content);
            mmt2.setSubType("mixed");

            mm.setContent(mmt2);
            mm.saveChanges();

            //发送邮件
            ts.sendMessage(mm, mm.getAllRecipients());
            //发送成功返回success
            return "success";
        }
        catch(MessagingException e){
            return e.toString();
        }

    }

}

      3、使用上面的类发送测试邮件

      (1)发送只包含文本的邮件

        //发送一封文本测试邮件
        SendMailSmtp sms = new SendMailSmtp();
        sms.setMailSmtpServer("smtp.qq.com");
        sms.setMailSender("xxxx@qq.com");
        sms.setMailUser("xxxx");
        sms.setMailPass("mail pass");
        String mailcontent = "</br>尊敬的xxx:</br>您好!</br>您的好友委托我们为您送来一份超值优惠券,吃喝玩乐全都有,最低只要一折起,微信扫码即可享受。"
                + "</br>下面列举几个优惠券供参考:</br></br>"
                + "<img src='http://url/test.jpg'/>";
        if(sms.GetTransport() == "success"){
            System.out.println(sms.SendText("xx@qq.com", "test mail", mailcontent));
            sms.CloseTransport();
        }

      (2)发送包含文本及图片的邮件

        //发送一封文本+图片测试邮件
        SendMailSmtp sms = new SendMailSmtp();
        sms.setMailSmtpServer("smtp.qq.com");
        sms.setMailSender("xxxx@qq.com");
        sms.setMailUser("xxxx");
        sms.setMailPass("mail pass");
        String mailcontent = "</br>尊敬的xxx:</br>您好!</br>您的好友委托我们为您送来一份超值优惠券,吃喝玩乐全都有,最低只要一折起,微信扫码即可享受。"
                + "</br>下面列举几个优惠券供参考:</br></br>"
                + "<img src='http://url/test.jpg'/>";
        if(sms.GetTransport() == "success"){
            System.out.println(sms.SendImage("xx@qq.com", "test image mail", mailcontent, "f:/test.jpg"));
            sms.CloseTransport();
        }

      (3)发送包含文本和附件的邮件

        //发送一封文本+附件测试邮件
        SendMailSmtp sms = new SendMailSmtp();
        sms.setMailSmtpServer("smtp.qq.com");
        sms.setMailSender("xxxx@qq.com");
        sms.setMailUser("xxxx");
        sms.setMailPass("mail pass");
        String mailcontent = "</br>尊敬的xxx:</br>您好!</br>您的好友委托我们为您送来一份超值优惠券,吃喝玩乐全都有,最低只要一折起,微信扫码即可享受。"
                + "</br>下面列举几个优惠券供参考:</br></br>"
                + "<img src='http://url/test.jpg'/>";
        if(sms.GetTransport() == "success"){
            System.out.println(sms.SendAttach("xx@qq.com", "test attach mail", mailcontent, "f:/test.txt"));
            sms.CloseTransport();
        }

      (4)发送包含文本+图片+附件的邮件

        //发送一封文本+图片+附件测试邮件
        SendMailSmtp sms = new SendMailSmtp();
        sms.setMailSmtpServer("smtp.qq.com");
        sms.setMailSender("xxxx@qq.com");
        sms.setMailUser("xxxx");
        sms.setMailPass("mail pass");
        String mailcontent = "</br>尊敬的xxx:</br>您好!</br>您的好友委托我们为您送来一份超值优惠券,吃喝玩乐全都有,最低只要一折起,微信扫码即可享受。"
                + "</br>下面列举几个优惠券供参考:</br></br>"
                + "<img src='http://url/test.jpg'/>";
        if(sms.GetTransport() == "success"){
            System.out.println(sms.SendImageAndAttach("xx@qq.com", "test image and attach mail", mailcontent, "f:/test.jpg", "f:/test.txt"));
            sms.CloseTransport();
        }

      好了,第一步发送邮件的基础已准备完备,下面的步骤就是如何制定定时任务开展群发,本篇就到这里,完整应用请看下一篇。顺带帮朋友的公众号推广一下,猿友们可以用微信扫码下面二维码关注公众号,吃喝玩乐优惠券什么都有,最低只要一折,真的是超级优惠。

 

这篇关于java实战:邮件群发推广微信公众号(一),内含java操作excel及java操作mysql的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!