Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日本a免费观看,欧美一区视频在线,国产成人一区二区精品非洲

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          使用WordPress的WP-MAIL-SMTP插件

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

          用WordPress開(kāi)發(fā)企業(yè)官網(wǎng)或者B2B營(yíng)銷型網(wǎng)站或者B2C零售網(wǎng)站,

          總是需要有一個(gè)郵件提醒功能的。

          每當(dāng)網(wǎng)站上有訪客提交詢盤,或者有人下單購(gòu)物了,又或者網(wǎng)了什么系統(tǒng)問(wèn)題,作為WordPress網(wǎng)站管理員來(lái)說(shuō),都希望能夠收到一個(gè)郵件通知,這樣就能時(shí)時(shí)刻刻關(guān)注網(wǎng)站動(dòng)態(tài)了。

          很多WordPress新手搭建的網(wǎng)站,

          往往都不懂怎么設(shè)置郵件提醒。

          WP花園作為一家專業(yè)為客戶提供WordPress企業(yè)級(jí)服務(wù)的科技公司,

          將會(huì)在這篇文章中詳細(xì)介紹如何通過(guò)WP-AMIL-SMTP插件,

          來(lái)幫助您收到來(lái)WordPress網(wǎng)站的任何提醒!

          開(kāi)始準(zhǔn)備好小板凳,上課咯!

          安裝 WP-MAIL-SMTP插件

          這個(gè)是一個(gè)免費(fèi)的WordPress郵件SMTP設(shè)置插件,

          您可以直接在WordPress的插件庫(kù)中通過(guò)名字的搜索找到,

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

          安裝好插件之后,

          你會(huì)在WordPress后臺(tái)的左邊欄目中看到WP MAIL SMTP的條目,

          點(diǎn)進(jìn)去就能進(jìn)入設(shè)置頁(yè)面。

          WP MAIL SMTP插件介紹

          這個(gè)WordPress郵件提醒插件的設(shè)置,

          很多新人第一次操作的時(shí)候,

          往往會(huì)因?yàn)槠渲械囊粋€(gè)小問(wèn)題,導(dǎo)致沒(méi)法對(duì)外發(fā)送郵件。

          其實(shí)只要做過(guò)一次SMTP郵件插件的設(shè)置后,以后新的網(wǎng)站,都能照搬相同的配置了。

          在這篇文章中,我們以阿里云郵箱為例,做一個(gè)國(guó)內(nèi)的smtp郵件服務(wù)器設(shè)置。

          國(guó)內(nèi)阿里云郵箱SMTP設(shè)置

          當(dāng)你進(jìn)入到了WP MAIL SMTP編輯頁(yè)面后,

          直接無(wú)視他的授權(quán)碼版塊,

          在發(fā)件人中填寫(xiě)你要用來(lái)發(fā)郵件的郵箱地址,

          然后勾選強(qiáng)制使用:

          接著往下移動(dòng),設(shè)置一下【發(fā)件人名稱】,也勾選強(qiáng)制使用,返回路徑也順便勾選一下。

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

          其他SMTP設(shè)置

          當(dāng)你勾選了【其他SMTP】以后,你會(huì)看到更多設(shè)置的字段,這里非常復(fù)雜,我們一一為您講解:

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

          按照上述設(shè)置好之后,點(diǎn)擊保存按鈕。

          電子郵件測(cè)試

          好的,你認(rèn)真填寫(xiě)了各種內(nèi)容,但是怎么知道這些信息是正確的呢?

          點(diǎn)擊WP MAIL SMTP插件編輯頁(yè)面中的【電子郵件測(cè)試】,進(jìn)入到一個(gè)新的頁(yè)面,輸入您的另一個(gè)常用郵箱,然后啟用HTML,點(diǎn)擊發(fā)送電子郵件:

          如果你操作正確,那么1分鐘之內(nèi),您會(huì)收到這封郵件:

          很好,現(xiàn)在你可以開(kāi)始接受網(wǎng)站的任何消息提示了!

          其他插件的設(shè)置(重要)

          其實(shí)工作到這里,還沒(méi)有完成。

          WP MAIL SMTP插件只是幫你開(kāi)啟了一個(gè)能夠在WordPress網(wǎng)站對(duì)外發(fā)送郵件的郵箱地址(也就是你設(shè)置的那個(gè))。

          但是為了和其他插件配合使用,在其他插件設(shè)置的過(guò)程中,在【發(fā)件人】選項(xiàng),要記得填寫(xiě)你設(shè)置的這個(gè)郵箱地址。

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

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

          WP花園的結(jié)語(yǔ)

          作為一家專業(yè)的WordPress網(wǎng)站開(kāi)發(fā)公司,我們每一個(gè)幫客戶開(kāi)發(fā)的WordPress網(wǎng)站,都要設(shè)置一個(gè)郵件提醒功能,所以WP MAIL SMTP是一個(gè)非常重要的插件。

          在這篇文章中,

          我們?cè)敿?xì)介紹了這個(gè)插件的使用方法。

          小朋友們,你學(xué)會(huì)了嗎?

          想要開(kāi)發(fā)一個(gè)高級(jí)的WordPress網(wǎng)站,歡迎聯(lián)系我們專業(yè)的團(tuán)隊(duì)!

          送郵件常用的有163郵箱,qq郵箱,其中發(fā)送郵件的協(xié)議叫SMTP,接收郵件的協(xié)議叫POP3/IMAP,IMAP協(xié)議比POP3更強(qiáng)大,不過(guò)我們不需要要關(guān)注,因?yàn)榉?wù)器集成郵件只會(huì)涉及到發(fā)送郵件,一般不涉及接收郵件。


          我們已163郵箱為例來(lái)講解,首先要開(kāi)通允許客戶端發(fā)送郵件的功能


          登錄進(jìn)163郵箱后,點(diǎn)擊設(shè)置


          ?


          選擇開(kāi)啟服務(wù),下面兩個(gè)隨便哪個(gè)都可以,點(diǎn)擊開(kāi)啟后會(huì)提示掃碼發(fā)送短信,發(fā)完短信會(huì)顯示授權(quán)碼, 這個(gè)授權(quán)碼只會(huì)顯示一次,要記錄下來(lái),后面會(huì)用到


          ?


          接下來(lái)就是代碼階段了


          1.引入依賴


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



          2.加入配置


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



          3.發(fā)送純文本郵件


          @Service
          public class EmailService {
              @Value("${spring.mail.username}")
              private String from;
              @Autowired
              private JavaMailSender mailSender;
          
              /**
               * 發(fā)送純文本郵件
               *
               * @param tos     接收方
               * @param subject 主題
               * @param content 郵件內(nèi)容
               * @return
               */
              public void sendTxtMail(String[] tos, String subject, String content) {
                  //創(chuàng)建簡(jiǎn)單郵件消息
                  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("發(fā)送郵件失敗", e);
                  }
              }
          }



          4.發(fā)送帶html格式的郵件


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



          5.發(fā)送帶附件的郵件


          由于發(fā)送附件的時(shí)間較長(zhǎng),所有我們用@Async注解做成異步的,SpringBoot的異步線程只有一個(gè),所以并發(fā)量大的話會(huì)有延遲,有條件的話可以把發(fā)送郵件的任務(wù)放入MQ,然后從MQ中取出再執(zhí)行。


          /**
           * 發(fā)送帶附件的郵件,附件格式為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轉(zhuǎn)成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);
              //發(fā)送完刪除臨時(shí)文件
              for (File file : list) {
                  file.delete();
              }
          }
          
          /**
           * 發(fā)送帶附件的郵件,F(xiàn)ile格式
           *
           * @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) {
              //創(chuàng)建一個(gè)MINE消息
              MimeMessage message=mailSender.createMimeMessage();
              try {
                  MimeMessageHelper helper=new MimeMessageHelper(message, true);
                  helper.setFrom(from);
                  helper.setTo(tos);
                  helper.setSubject(subject);
                  //郵件內(nèi)容   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("發(fā)送郵件失敗", e);
              }
          }
          
          @Getter
          @Setter
          @AllArgsConstructor
          static class ResourceBean {
              FileSystemResource resource;
              String filename;
          }
          



          下面是MultipartFile轉(zhuǎn)File的方法


          /**
           * multiFile轉(zhuǎn)成file,在本地生成一個(gè)文件,文件名隨機(jī),使用完需刪除
           *
           * @param multiFile 要轉(zhuǎn)換的文件
           * @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.使用模板發(fā)送郵件


          我們使用thymeleaf作為模板來(lái)發(fā)送郵件,首先引入依賴


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



          加入配置項(xiàng),所有模板放在類路徑的templates下面并且以html結(jié)尾


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



          然后在建一個(gè)mail.html


          ?


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



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


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




          ?


          主站蜘蛛池模板: 精品视频一区二区三区免费| 久久婷婷久久一区二区三区| 国产激情无码一区二区| 中文无码一区二区不卡αv | 一区二区手机视频| 亚洲AV色香蕉一区二区| 国产免费一区二区三区不卡 | 精品视频一区在线观看| 伊人无码精品久久一区二区| 亚洲一区二区三区91| 久久精品国产一区二区三区| 精品女同一区二区三区免费播放| 88国产精品视频一区二区三区| 亚洲毛片αv无线播放一区| 国产精品成人一区二区| 天堂不卡一区二区视频在线观看 | 无码国产亚洲日韩国精品视频一区二区三区| 91一区二区在线观看精品| 日产亚洲一区二区三区| 日本一区二区不卡视频| 无码人妻精品一区二区三区66 | 在线观看视频一区二区| 国产色欲AV一区二区三区| 日韩一区二区在线免费观看| 少妇一晚三次一区二区三区| 中字幕一区二区三区乱码| 97久久精品无码一区二区天美| 无码少妇一区二区性色AV| 日韩国产精品无码一区二区三区| 亚洲AV无码一区二区乱子伦| 精品一区二区三区在线观看视频 | 国产精品高清视亚洲一区二区| 久久毛片一区二区| 国精产品一区一区三区MBA下载| 亚洲爆乳精品无码一区二区| 免费无码一区二区三区蜜桃大| 国产三级一区二区三区| 精品亚洲一区二区三区在线播放| 日韩人妻无码一区二区三区| 色妞色视频一区二区三区四区| 国产精品亚洲午夜一区二区三区 |