整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          使用WordPress的WP-MAIL-SMTP插件

          使用WordPress的WP-MAIL-SMTP插件教程設置郵件提醒功能

          用WordPress開發企業官網或者B2B營銷型網站或者B2C零售網站,

          總是需要有一個郵件提醒功能的。

          每當網站上有訪客提交詢盤,或者有人下單購物了,又或者網了什么系統問題,作為WordPress網站管理員來說,都希望能夠收到一個郵件通知,這樣就能時時刻刻關注網站動態了。

          很多WordPress新手搭建的網站,

          往往都不懂怎么設置郵件提醒。

          WP花園作為一家專業為客戶提供WordPress企業級服務的科技公司,

          將會在這篇文章中詳細介紹如何通過WP-AMIL-SMTP插件,

          來幫助您收到來WordPress網站的任何提醒!

          開始準備好小板凳,上課咯!

          安裝 WP-MAIL-SMTP插件

          這個是一個免費的WordPress郵件SMTP設置插件,

          您可以直接在WordPress的插件庫中通過名字的搜索找到,

          或者你直接就輸入smtp,然后第一個安裝量最多的那個插件,就是你想要找的了:

          安裝好插件之后,

          你會在WordPress后臺的左邊欄目中看到WP MAIL SMTP的條目,

          點進去就能進入設置頁面。

          WP MAIL SMTP插件介紹

          這個WordPress郵件提醒插件的設置,

          很多新人第一次操作的時候,

          往往會因為其中的一個小問題,導致沒法對外發送郵件。

          其實只要做過一次SMTP郵件插件的設置后,以后新的網站,都能照搬相同的配置了。

          在這篇文章中,我們以阿里云郵箱為例,做一個國內的smtp郵件服務器設置。

          國內阿里云郵箱SMTP設置

          當你進入到了WP MAIL SMTP編輯頁面后,

          直接無視他的授權碼版塊,

          在發件人中填寫你要用來發郵件的郵箱地址,

          然后勾選強制使用:

          接著往下移動,設置一下【發件人名稱】,也勾選強制使用,返回路徑也順便勾選一下。

          然后再【郵件程序】中選擇【其他SMTP】,這個很重要,不要選錯了:

          其他SMTP設置

          當你勾選了【其他SMTP】以后,你會看到更多設置的字段,這里非常復雜,我們一一為您講解:

          • SMTP主機:smtp.mxhichina.com (阿里云默認的就是這個)
          • 使用SSL加密
          • STMP端口 465
          • 開啟TLS
          • 開啟認證
          • SMTP用戶名:你的郵件地址
          • SMTP密碼:你的郵件地址的密碼

          按照上述設置好之后,點擊保存按鈕。

          電子郵件測試

          好的,你認真填寫了各種內容,但是怎么知道這些信息是正確的呢?

          點擊WP MAIL SMTP插件編輯頁面中的【電子郵件測試】,進入到一個新的頁面,輸入您的另一個常用郵箱,然后啟用HTML,點擊發送電子郵件:

          如果你操作正確,那么1分鐘之內,您會收到這封郵件:

          很好,現在你可以開始接受網站的任何消息提示了!

          其他插件的設置(重要)

          其實工作到這里,還沒有完成。

          WP MAIL SMTP插件只是幫你開啟了一個能夠在WordPress網站對外發送郵件的郵箱地址(也就是你設置的那個)。

          但是為了和其他插件配合使用,在其他插件設置的過程中,在【發件人】選項,要記得填寫你設置的這個郵箱地址。

          舉個例子,我們最常用的contact form 7中,想要收到網站表單提交的郵件提醒,就要在contact form 7的郵件編輯頁面,寫上你的這個郵箱地址:

          不要忘記了喲,其他插件也是類似的操作。

          WP花園的結語

          作為一家專業的WordPress網站開發公司,我們每一個幫客戶開發的WordPress網站,都要設置一個郵件提醒功能,所以WP MAIL SMTP是一個非常重要的插件。

          在這篇文章中,

          我們詳細介紹了這個插件的使用方法。

          小朋友們,你學會了嗎?

          想要開發一個高級的WordPress網站,歡迎聯系我們專業的團隊!

          送郵件常用的有163郵箱,qq郵箱,其中發送郵件的協議叫SMTP,接收郵件的協議叫POP3/IMAP,IMAP協議比POP3更強大,不過我們不需要要關注,因為服務器集成郵件只會涉及到發送郵件,一般不涉及接收郵件。


          我們已163郵箱為例來講解,首先要開通允許客戶端發送郵件的功能


          登錄進163郵箱后,點擊設置


          ?


          選擇開啟服務,下面兩個隨便哪個都可以,點擊開啟后會提示掃碼發送短信,發完短信會顯示授權碼, 這個授權碼只會顯示一次,要記錄下來,后面會用到


          ?


          接下來就是代碼階段了


          1.引入依賴


          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-mail</artifactId>
          </dependency>



          2.加入配置


          spring:
            mail:
              #smtp服務主機  qq郵箱則為smtp.qq.com
              host: smtp.163.com
              port: 465 #端口不要使用默認的25,阿里云無法開通這個端口,使用465
              protocol: smtps
              # 編碼集
              default-encoding: UTF-8
              #發送郵件的賬戶
              username: xxxxxxx@163.com
              #授權碼
              password: xxxxxx
              test-connection: true
              properties:
                mail:
                  smtp:
                    auth: true
                    starttls:
                      enable: true
                      required: true
          



          3.發送純文本郵件


          @Service
          public class EmailService {
              @Value("${spring.mail.username}")
              private String from;
              @Autowired
              private JavaMailSender mailSender;
          
              /**
               * 發送純文本郵件
               *
               * @param tos     接收方
               * @param subject 主題
               * @param content 郵件內容
               * @return
               */
              public void sendTxtMail(String[] tos, String subject, String content) {
                  //創建簡單郵件消息
                  SimpleMailMessage message=new SimpleMailMessage();
                  message.setFrom(from);
                  message.setTo(tos);
                  message.setSubject(subject);
                  message.setText(content);
                  try {
                      mailSender.send(message);
                  } catch (MailException e) {
                      e.printStackTrace();
                      throw new ServiceFailException("發送郵件失敗", e);
                  }
              }
          }



          4.發送帶html格式的郵件


          public void sendHtmlEmail(String[] tos, String subject, String html) {
              try {
                  //創建一個MINE消息
                  MimeMessage message=mailSender.createMimeMessage();
                  MimeMessageHelper minehelper=new MimeMessageHelper(message, true);
                  minehelper.setFrom(from);
                  minehelper.setTo(tos);
                  minehelper.setSubject(subject);
                  //郵件內容   true 表示帶有附件或html
                  minehelper.setText(html, true);
                  mailSender.send(message);
              } catch (Exception e) {
                  throw new ServiceFailException("發送郵件失敗", e);
              }
          }
          



          5.發送帶附件的郵件


          由于發送附件的時間較長,所有我們用@Async注解做成異步的,SpringBoot的異步線程只有一個,所以并發量大的話會有延遲,有條件的話可以把發送郵件的任務放入MQ,然后從MQ中取出再執行。


          /**
           * 發送帶附件的郵件,附件格式為Multipart
           *
           * @param tos
           * @param subject
           * @param html
           * @param files
           */
          @Async
          public void sendMultipartEmail(String[] tos, String subject, String html, List<MultipartFile> files) {
              List<File> list=new ArrayList<>();
              List<ResourceBean> resourceBeans=new ArrayList<>();
              if (CollectionUtils.isNotEmpty(files)) {
                  for (MultipartFile multipartFile : files) {
                      //把multipart轉成file
                      Optional<File> optionalFile=FileUtils.multipartFileToFile(multipartFile);
                      //存在則放入list
                      optionalFile.ifPresent(file -> {
                          list.add(file);
                          resourceBeans.add(new ResourceBean(new FileSystemResource(file), multipartFile.getOriginalFilename()));
                      });
                  }
              }
              sendResourceEmail(tos, subject, html, resourceBeans);
              //發送完刪除臨時文件
              for (File file : list) {
                  file.delete();
              }
          }
          
          /**
           * 發送帶附件的郵件,File格式
           *
           * @param tos
           * @param subject
           * @param html
           * @param files
           */
          @Async
          public void sendHtmlEmail(String[] tos, String subject, String html, List<File> files) {
              List<ResourceBean> resourceBeans=files.stream().map(file -> new ResourceBean(new FileSystemResource(file), file.getName())).collect(Collectors.toList());
              sendResourceEmail(tos, subject, html, resourceBeans);
          }
          
          private void sendResourceEmail(String[] tos, String subject, String html, List<ResourceBean> resourceBeans) {
              //創建一個MINE消息
              MimeMessage message=mailSender.createMimeMessage();
              try {
                  MimeMessageHelper helper=new MimeMessageHelper(message, true);
                  helper.setFrom(from);
                  helper.setTo(tos);
                  helper.setSubject(subject);
                  //郵件內容   true 表示帶有附件或html
                  helper.setText(html, true);
                  if (CollectionUtils.isNotEmpty(resourceBeans)) {
                      for (ResourceBean resourceBean : resourceBeans) {
                          //添加附件
                          helper.addAttachment(resourceBean.getFilename(), resourceBean.getResource());
                      }
                  }
                  mailSender.send(message);
              } catch (Exception e) {
                  throw new ServiceFailException("發送郵件失敗", e);
              }
          }
          
          @Getter
          @Setter
          @AllArgsConstructor
          static class ResourceBean {
              FileSystemResource resource;
              String filename;
          }
          



          下面是MultipartFile轉File的方法


          /**
           * multiFile轉成file,在本地生成一個文件,文件名隨機,使用完需刪除
           *
           * @param multiFile 要轉換的文件
           * @return
           */
          public static Optional<File> multipartFileToFile(MultipartFile multiFile) {
              // 獲取文件名
              String fileName=multiFile.getOriginalFilename();
              // 獲取文件后綴
              String prefix=getExtention(fileName);
              try {
                  File file=File.createTempFile(UUIDUtils.getUUID(), prefix);
                  file.deleteOnExit();
                  multiFile.transferTo(file);
                  return Optional.of(file);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return Optional.empty();
          }



          6.使用模板發送郵件


          我們使用thymeleaf作為模板來發送郵件,首先引入依賴


          <!-- thymeleaf模板 -->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-thymeleaf</artifactId>
          </dependency>



          加入配置項,所有模板放在類路徑的templates下面并且以html結尾


          spring:
            thymeleaf:
              cache: false
              mode: LEGACYHTML5
              prefix: classpath:/templates/
              suffix: .html



          然后在建一個mail.html


          ?


          <!DOCTYPE html>
          <html lang="en" xmlns:th="http://www.thymeleaf.org">
          <head>
              <meta charset="UTF-8">
              <title>郵件模板</title>
          </head>
          <body>
          <p>您好,感謝您的注冊,這時一封驗證郵件,請點擊下面的鏈接完成注冊!</p>
          <a href="#" th:href="@{http://www.baidu.com(id=${id})}">點我完成注冊</a>
          </body>
          </html>



          使用templateEngine拿到模板和參數,渲染成html, 之后就跟發送html郵件一樣了


          @Async
          public void sendTemplateEmail(String[] tos, String subject, String templateName, Map<String, Object> params) {
              Context context=new Context();
              //設置參數
              if (params !=null) {
                  Set<Map.Entry<String, Object>> entrySet=params.entrySet();
                  entrySet.stream().forEach(entry -> context.setVariable(entry.getKey(), entry.getValue()));
              }
              //渲染模板,獲得html內容
              String html=templateEngine.process("email/" + templateName, context);
              sendHtmlEmail(tos, subject, html);
          }




          ?


          主站蜘蛛池模板: 国产精品 视频一区 二区三区| 久久精品黄AA片一区二区三区| 精品女同一区二区三区在线| 99偷拍视频精品一区二区| 蜜桃无码一区二区三区| 麻豆AV一区二区三区| 午夜一区二区免费视频| 国产成人AV区一区二区三| 麻豆视传媒一区二区三区| 日韩精品无码一区二区三区四区| 精品亚洲一区二区| 五十路熟女人妻一区二区| 亚洲第一区精品观看| 香蕉久久一区二区不卡无毒影院 | 亚洲片国产一区一级在线观看| 好湿好大硬得深一点动态图91精品福利一区二区| 国产精品成人99一区无码| 国产免费伦精品一区二区三区| 久久99国产精品一区二区| 久久久无码精品人妻一区| 91麻豆精品国产自产在线观看一区| 射精专区一区二区朝鲜| 福利一区二区在线| 亚洲蜜芽在线精品一区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 国产乱码精品一区二区三区麻豆| 女人和拘做受全程看视频日本综合a一区二区视频 | 蜜臀AV一区二区| 国产福利电影一区二区三区,日韩伦理电影在线福 | 亚洲啪啪综合AV一区| 精品少妇人妻AV一区二区| 国产一区二区三区免费观看在线 | 国产一区二区精品久久| 日韩AV片无码一区二区不卡| 不卡一区二区在线| 日韩高清一区二区| 麻豆高清免费国产一区| 天堂Aⅴ无码一区二区三区| 精品无码国产AV一区二区三区| 久久99国产精品一区二区| 视频一区二区三区人妻系列|