使用PHPMailer类发送电子邮件

Published on:
Tags: email php
一、下载phpMailer#

phpMailer 是一个非常强大的PHP邮件发送类,可以设定发送邮件地址、回复地址、邮件主题、html网页、上传附件、并且使用起来非常方便。

以下测试使用 phpMailer 连接163邮箱服务,发送邮件。当然连接QQ邮箱服务发送邮件也一样的,唯一的区别是端口不一样,163的smtp服务使用25端口,而QQ的smtp服务使用587端口。

phpMailer包含以下5个类。此处要注意,把phpMailer的源码放到自己项目里的时候,要根据项目的文件结构,修改源码的命名空间,否则有可能出现调用不到的错误。

phpMailer源码
phpMailer源码
二、准备环境#

PHPMailer通过socket连接邮件服务器,所以需要PHP环境需要装有sockets扩展,此外如果需要SSL加密邮件,还需要openssl扩展。

邮箱服务商默认是不允许用户在邮件客户端软件登陆的,但如果需要,需要去后台开启,并且获得授权码,使用邮箱地址+授权码在邮件客户端登陆。

开启客户端登陆服务
开启客户端登陆服务
三、编写代码#

一切准备好了,可以测试发邮件了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public function sendEmail()
{
$mail = new \Task\Sdk\PHPMailer\PHPMailer(true);
try {
//发送邮件配置信息
$email_setting = array(
'host'=>"smtp.163.com", //smtp收件箱地址
'port'=>"25", //smtp收件箱端口
'username'=>"username1@163.com", //smtp认真用户名和密码
'password'=>"QTWIF*****STQC", //登陆授权码
'charset'=>"utf-8", //邮件字符编码
'from'=>["username1@163.com", "username1"], //发件人地址
'to'=>[ //收件人地址和名称,可多个
["username2@163.com","username2"]
],
'cc'=>[ //抄送地址和名称,可多个
["username3@163.com","username3"]
],
'bcc'=>[ //密抄送地址和名称,可多个
["username4@qq.com","username4"]
],
);


$mail->isSMTP(); //发送邮件,使用smtp协议
$mail->Host = $email_setting['host'];
$mail->SMTPAutoTLS = false; //关闭自动启用TLS加密
$mail->SMTPAuth = true;
$mail->Username = $email_setting['username'];
$mail->Password = $email_setting['password'];
$mail->Port = $email_setting['port'];
$mail->CharSet = $email_setting['charset'];

//发件人
$mail->setFrom($email_setting['from'][0], $email_setting['from'][1]);
//收件人
foreach($email_setting['to'] as $to){
$mail->addAddress($to[0],$to[1]);
}
//抄送
foreach($email_setting['cc'] as $cc){
$mail->addCC($cc[0],$cc[1]);
}
//密抄送
foreach($email_setting['bcc'] as $bcc){
$mail->addBCC($bcc[0],$bcc[1]);
}

// Content
$mail->isHTML(true); //email格式为HTML
$mail->Subject = '这是一封测试邮件,不用理会';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';

$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
}
四、补充#

电子邮件中的CC 英文全称是 Carbon Copy(抄送)。

电子邮件中的BCC英文全称是 Blind Carbon Copy(暗抄送)。

两者的区别在于在BCC栏中的收件人可以看到所有的收件人名(TO,CC,BCC),而在TO和CC栏中的收件人看不到BBC的收件人名。

理解电子邮件的收发过程

Published on:
Tags: email
一、电子邮件的收发过程#

模拟用户A在邮件客户端上使用QQ邮箱,发送邮件给用户B的163邮箱的过程1

邮件的收发过程
邮件的收发过程
  1. 用户A在邮件客户端上写好邮件,发出去后,邮件先到达QQ邮箱的SMTP服务器;

  2. QQ邮箱的SMTP服务器根据收件地址判断,收件地址与发件地址是否属于同一个邮箱服务商:

    1. 同属于一个邮箱服务商,QQ邮箱的SMTP服务器会把邮件保存到QQ邮箱的内部存储空间

    2. 属于不同邮箱服务商,QQ邮箱的SMTP服务器把邮件转发给163邮箱的SMTP服务器

  3. 163邮箱的SMTP服务器收到邮件后,也会像第2步骤一样判断是否同属于一个邮箱服务商,最后保存到163邮箱的内部存储空间;

  4. 现在的邮件客户端都有定时自动收取邮件的功能,用户也可以手动收取邮件。邮件客户端向163邮箱的POP3服务器发起收取邮件的请求后,POP3服务器从163邮箱的内部存储空间接收邮件,然后返回给邮件客户端。

二、3种邮件协议#

电子邮件的收发过程中,第1步发送邮件和第2.2步转发邮件使用的是SMTP协议;第4步收取邮件使用的是POP3协议。

SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则。SMTP协议属于TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送邮件的。

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它定义了邮件客户端软件和POP3邮件服务器的通信规则。POP3服务器是遵循POP3协议的服务器,用来接收电子邮件的。

IMAP全称是Internet Mail Access Protocol,即互联网邮件访问协议,它是跟POP3类似的邮件访问标准协议之一,可以看作是POP3协议的扩展。

IMAP和POP3的区别

POP3允许邮件客户端下载服务器上的邮件,但是在邮件客户端的操作(如:移动邮件、标记已读等),是不会反馈到服务器上的。
但是IMAP就不同了,邮件客户端的操作都会反馈到服务器上,对邮件进行的操作(如:移动邮件、标记已读等),服务器上的邮件也会做相应的动作。也就是说,IMAP是“双向”的。
同时,IMAP可以只下载邮件的主题,只有当真正需要的时候,才会下载邮件的所有内容。

参考#

[1] 邮件实现详解(一)——邮件发送的基本过程与概念

如何为你的GitHub Pages自定义域名

Published on:
Tags: github
一、前提条件#

1.已经搭建了GitHub Pages站点

2.已经购买了域名(国内的话要实名认证)

二、域名解析#

到域名提供商的后台,为域名添加解析,此处以阿里云为例。

添加两条CNAME记录,主机记录分别是「www」和「@」,如下图:

域名解析
域名解析

主机记录「www」和「@」的区别是解析的域名的形式,以域名chenzaofeng.xyz为例:

主机记录「www」对应 www.chenzaofeng.xyz域名

主机记录「@」对应 chenzaofeng.xyz域名

一般「www」和「@」都是一起出现

三、到GitHub仓库配置域名#

回到GitHub Pages的仓库,到Settings选项卡下面,找到GitHub Pages块(如下图),在Custom domain下面的输入框里填入域名,保存就完成了。

配置域名
配置域名

此时到Code选项卡下面,会发现多了个CNAME文件,这个文件的内容就是刚刚填写的域名。

CNAME文件

CNAME文件

等待10分钟后就可以使用自定义的域名访问GitHub Pages站点了。

四、补充#

在第二步解析域名的时候,一开始我添加的是两条A记录,等到第三步配置好之后,就收到了GitHub的提示邮件,建议我使用CNAME记录,于是才修改了回来,感兴趣的可以尝试一下。

推荐使用CNAME记录
推荐使用CNAME记录

关于CNAME记录和A记录,不用在意名字什么意思,只要知道A记录指向的是一个IPV4地址,CNAME记录指向的是另一个域名就好了。

如何利用GitHub快速搭建一个博客

Published on:
Tags: github
一、前提条件#

1.拥有一个GitHub账号

2.安装了ruby环境(版本在2.4以上)

二、准备工作——安装Jekyll#

1.执行命令 ruby -v,查看ruby版本,是否为2.4.0或更高版本

2.执行 gem -v,查看RubyGems检查版本

3.执行命令,安装jekyllbundler

1
gem install jekyll bundler

安装Jekyll过程如果遇到网络问题,可以多试几次。

以下是官方文档,根据你的操作系统选择阅读

官方文档
官方文档
三、开始搭建#

1.进入我的仓库

2.点击右上角的 Fork 将我的仓库拉倒你的账号下

3.克隆仓库到本地

1
git clone git@github.com:your_github_name/zaofengchen.github.io.git

4.进入博客目录

1
cd zaofengchen.github.io.git

5.开启服务

1
jekyll serve

6.访问

访问 http://127.0.0.1:4000

首页
首页显示

首页
内容页显示

7.测试发博文

_posts目录下新建一个markdown文件,文件名以.md为后缀

例如:2020-04-13-如何最快的搭建一个博客.md
文件名必须使用规定的格式

编写文件,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
---
layout: page
title: "这是一篇测试博客!"
date: 2020-04-13 04:05:33 +0800
---

**登鹳雀楼**

_唐代:王之涣_

白日依山尽,黄河入海流。

欲穷千里目,更上一层楼。

此时再次访问首页 会出现新的博文

首页
首页显示

新的博文
新的博文显示

8.发布到GitHub

  • 为你的博客新建一个仓库,仓库名为:your_github_name.github.io
  • 回到终端,按住 ctrl-c,停止服务
  • 修改博客目录名字为your_github_name.github.io,进入博客目录
  • 执行命令
    1
    2
    3
    4
    5
    git init
    git add .
    git commit -m "init"
    git remote add origin git@github.com:zaofengchen/your_github_name.github.io
    git push -u origin master

访问 http://your_github_name.github.io 即可看到博客

至此,一个博客就搭建完成了。