typora-copy-images-to: upload
hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工具即可实现远程发送邮件,不需要使用公网服务器,不需要域名,而且邮件账号名称可以自定义.
下面以windows 10系统为环境,介绍使用方法:
1. 安装hMailServer
进入官方下载:https://www.hmailserver.com/download,选择最新版本,下载的时候浏览器可能会提示报毒,点击保留即可
下载好后.打开exe文件进行安装,直接点击Next下一步即可,到了设置密码步骤,我们设置一个密码,然后Next下一步完成安装
2. 设置hMailServer
上面我们安装完成了hMailServer,现在设置邮件名称和添加账号,打开hMailServer,点击connect
连接本地的服务
提示输入密码,该密码是我们上面设置的密码,输入后点击ok
进入后,我们首先需添加一个邮件主体名称,点击Add domain
这个名称我们可以随便设置,符合一个域名标准格式即可,如abc.com ,123.com , test.com等,我们这边设置test.com
测试使用,设置完成点击sava保存
加下来添加账号,点击Domains,然后点击上面我们设置域名主名称下面的Accounts,进入后点击右侧的Add,添加账号
输入账号名称,和密码,名称我们可以自定义,这里我们创建的账号就是我们的邮箱账号,账号和密码就是我们登录邮箱的账号密码
同样的方式,我们再创建一个,方便测试,两个名称不要重复
设置完成后,我们可以看到列表出现了两个用户,服务端就设置完成了
3. 客户端安装添加账号
上面我们设置好了本地自己的邮件服务,现在我们安装客户端测试,这边安装一个Foxmail客户端进行测试,进入官网下载:https://www.foxmail.com/
下载后安装,安装完成打开Foxmail,我们添加邮箱账号,点击其他邮箱
点击手动设置
在页面上我们输入上面创建的账号和密码,服务器地址填写本机地址:127.0.0.1
,其他参数默认,输入完点击创建
添加账号成功后我们在左侧看到了我们自己的账号,添加我们创建的第二个账号,点击左侧菜单下面的账号管理
我们看到有个定时收取邮件的按钮,取消勾选,然后点击新建
同样选择其他邮件—手动设置,输入我们上面创建的第二个邮箱账号的账号密码,点击创建
创建后,我们同样勾选定时收取邮件按钮,点击应用即可,账号添加完成
4. 测试发送邮件
我们上面在Foxmail添加了两个账号,现在测试发送邮件,选中一个账号,点击写邮件
收件人填写我们另一个账号,然后输入邮件内容,点击发送
发送完成后,我们点击页面上面收取邮件,即可看到我们发送的邮件,如果点击一次没有出来,可以等10秒再次点击,本地测试发送邮件完成,下面我们配置远程发送邮件
5. 安装cpolar
cpolar官网:https://www.cpolar.com/
Windows系统可以直接在官网下载适用于Windows平台的zip压缩包,解压后得到cpolar安装包,然后双击安装包一路默认安装即可。
6. 创建公网地址
cpolar安装成功后,在浏览器上访问cpolar web UI管理界面(默认为本地9200端口),以【 http://本地ip地址:9200 】形式访问,如http://127.0.0.1:9200/,并使用cpolar账号登录
登录成功后,点击左侧的隧道管理——创建隧道,我们先创建第一个隧道,这个隧道是收邮件隧道:
- 隧道名称:收邮件
- 协议:选择tcp协议
- 本地地址:110(服务端的收邮件端口)
- 端口类型:随机临时TCP端口
- 地区:China vip
点击创建
创建第二个隧道,发邮件隧道
- 隧道名称:发邮件
- 协议:选择tcp协议
- 本地地址:25(服务端的发邮件端口)
- 端口类型:随机临时TCP端口
- 地区:China vip
创建成功后,点击左侧仪表盘的状态——在线隧道列表,可以看到刚刚创建成功的两个隧道,一个是发邮件,一个收邮件,中间这个就是对应的公网地址,通过这个地址我们就可以实现两个账号远程发送邮件.
7. 测试远程发送邮件
打开我们Forxmail 邮箱客户端,找到我们添加的账号,右键点击设置
然后设置收件服务器和发件服务器的地址,这两个地址就是我们上面创建的两个cpolar公网地址,端口对应公网地址的端口,记得不要输入错误,输入完点击应用,
设置完成后,我们使用设置公网地址的这个账号远程给另一个账号发送邮件.
可以看到另一个接收完成了,远方的朋友通过这个方式添加账号即可发送邮件给你
8. 固定连接公网地址
要注意的是,以上步骤使用的是cpolar随机临时tcp端口地址,所生成的公网地址为随机临时地址,该公网地址24小时内会随机变化。我们接下来为其配置固定的TCP端口地址,该地址不会变化,设置后将无需每天重复修改地址。
cpolar官网: https://dashboard.cpolar.com/login
登录cpolar官网,点击左侧的预留,找到保留的tcp地址,保留第一个接收邮件的地址:
- 地区:选择China
- 描述:接收邮件地址
点击保留
保留第二个发送邮件的地址:
- 地区:选择China
- 描述:发送邮件地址
点击保留
地址保留成功后,系统会生成相应的固定公网地址,将两个地址复制下来,这里记得区分好,不要搞混了
进入cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到我们上面创建接收邮件的tcp隧道,点击右侧的编辑
修改隧道信息,将官网保留成功的接收邮件地址固定tcp地址配置到隧道中
- 端口类型:修改为固定tcp端口
- 预留的tcp地址:填写官网保留成功的接收邮件地址,
点击更新
然后编辑第二个发邮件的隧道
同样,把另一个发送邮件的固定地址也配置到对应的发邮件隧道里面
两个隧道设置更新成功后,点击左侧仪表盘的状态——在线隧道列表,可以看到公网地址已经更新成为了固定tcp地址。
9. 测试固定远程地址发送邮件
同样我们选择其中一个邮箱账号,右键点击设置
我们把收件服务器和发件服务器的地址换成我们在cpolar官网设置的固定地址,记得地址不要搞反了,端口对应地址的端口,设置完成点击应用
然后选择这个邮箱向另一个邮箱账号发送邮件
我们可以看到邮件发送成功,另一个账号也接收成功,这样一个自己的邮件服务就搭建好了,同时可以远程发送邮件.
6211)]
我们把收件服务器和发件服务器的地址换成我们在cpolar官网设置的固定地址,记得地址不要搞反了,端口对应地址的端口,设置完成点击应用
[外链图片转存中…(img-bBepHJ9V-1687348106211)]
然后选择这个邮箱向另一个邮箱账号发送邮件
[外链图片转存中…(img-1q7CXz27-1687348106211)]
我们可以看到邮件发送成功,另一个账号也接收成功,这样一个自己的邮件服务就搭建好了,同时可以远程发送邮件.
文末送书
内容简介
《C++高性能编程》详细阐述了与C++高性能编程相关的基本解决方案,主要包括性能和并发性简介,性能测量, CPU架构、资源和性能,内存架构和性能,线程、内存和并发,并发和性能,并发数据结构,C++中的并发,高性能C++,C++中的编译器优化,未定义行为和性能,性能设计等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。
前言/序言
高性能编程艺术再次受到重视。多年以前,程序员必须对每一比特数据的情况都了如指掌(这里说的“一比特”有时就是它字面上的意思,因为一比特的数据就有可能控制前面板上的开关)。现在,计算机有足够的能力来处理日常任务。当然,总有一些领域永远没有足够的计算能力。但是,大多数程序员都可以避免编写低效的代码。这并不是一件坏事,因为程序员可以不受性能限制,专注于以其他方式改进代码。
本书首先解释为什么越来越多的程序员不得不再次关注性能和效率。这为整本书定下基调,因为它定义了我们将在后续章节中使用的方法:关于性能的知识最终必须来自测量,并且每个与性能相关的意见都必须有数据支持。
高性能编程有5个组成部分,它们也是共同决定程序性能的5个元素。
第1个元素是计算硬件,它也是我们需要深入探索的底层基础。本书从单个组件(处理器和内存)到多处理器计算系统进行了比较全面的讨论,详细阐释了内存模型、数据共享的成本,甚至无锁编程等。 第2个元素是高效使用编程语言。正是基于这一点,本书更加特定于C++(其他语言有不同的低效率特征)。 第3个元素是编译器。本书讨论了与编译器相关的提高程序性能的技巧。 第4个元素是设计。也可以说,它其实应该是排在第一位的元素:如果设计没有将性能作为其明确目标之一,那么在后期添加良好的性能几乎是不可能的。当然,本书将性能设计安排在最后,因为这是一个高级概念,它需要以我们之前讨论的所有知识为基础。 高性能编程的第5个元素就是程序员,程序员的知识和技能将决定最终结果。 为了帮助读者顺利学习,本书包含许多示例,可用于读者的实战探索和自学。高性能编程是一项艺术,对于艺术的追求永无止境。因此,本书将是读者探寻高性能编程的起 点,而不是终点。
本书读者
本书适用于从事性能关键项目开发并希望学习不同技术以提高代码性能的经验丰富的开发人员和程序员。计算机建模、算法交易、游戏、生物信息学、基于物理的模拟、计算机辅助设计、计算基因组学或计算流体动力学等领域的程序员都可以从本书中学习到各种技术,并将之应用到自己的工作领域。
虽然本书使用的是C++ 语言,但书中展示的概念可以很容易地转移或应用到其他编译语言,如C、C#、Java、Rust和Go等。