当前位置: 首页 » 新闻资讯 » 精彩美文 » 正文

用GoLang给自己写读写邮件的工具

放大字体  缩小字体 发布日期:2024-12-31 01:02:07  浏览次数:49
核心提示:8月3日新闻 本来用Python做了一个数据同步工具,其顶用到读写邮件。当初学习GoLang,就用GO从新实现一下读写邮件。其工作原理如
 
8月3日新闻 本来用Python做了一个数据同步工具,其顶用到读写邮件。当初学习GoLang,就用GO从新实现一下读写邮件。
其工作原理如下:
每5分钟检讨出产数据和备份数据是否正常同步,如果正常同步,则每半小时发送一个讲演畸形的邮件。如果不正常同步,则每半小时发送一个呈文异样的邮件。
Go语言1.14.6版本,IDE使用GoLand。
需要导入的包如下,(IDE会主动导入,个别不需要本人写)
import (
"github.com/emersion/go-imap"
"github.com/emersion/go-imap/client"
_ "github.com/emersion/go-message/charset"
"github.com/emersion/go-message/mail"
"gopkg.in/gomail,阿里企业邮全面体现企业形象 以企业域名(如abc#com)为邮箱后缀,所有员工邮箱均为“abe@企业域名”,树立统一的企业形象,方便企业形象推广,邮箱用户名可以采用员工姓名,便于记忆.v2"

发送邮件,可以各个参数离开写,当然也可以整体放到一个struct里面,如:
type EmailInfo struct {
ServerHost string // 邮箱服务器地址,如腾讯邮箱为smtp.qq.com
ServerPort int // 邮箱服务器端口,如腾讯邮箱为587
FromEmail string // 发件人邮箱地址
FromPasswd string //发件人邮箱密码(留神,这里是明文情势)
Recipient []string //收件人邮箱
CC []string //抄送
Subject []string //
Body string
Attachfilename string
AttackPath string
}
发送邮件函数(
其中,最需要注意的就是编码问题,程序中发送邮件仍是转成了base64编码。
from参数需要使用FormatAddress再次编码。
附件也须要注意编码问题
):

发送邮件函数m.SetHeader("To", emailInfo.Recipient...) // 切片可以传递给不定参数
这句代码学到了函数参数还可以这样传递。
main函数中,吸收邮件的流程如下:
//接受邮件log.Println("衔接服务器")
c, err := client.DialTLS("imap.qq.com:993", nil)
check_error(err)
defer c.Logout() // 停止撤退出登录
if err = c.Login(emailInfo.FromEmail, emailInfo.FromPasswd); err != nil {
log.Fatal(err)
}
log.Println("已登录")
假如直接读收件箱,能够这样写(通过下标来指定读取哪多少封邮件):
var mbox *imap.MailboxStatusmbox, err = c.Select("INBOX", false)
check_error(err)
log.Println("Flags for INBOX:", mbox.Flags) // [\Answered \Flagged \Deleted \Draft \Seen]// Get the last4 messages
ifrom := uint32(1)
ito := mbox.Messages
if mbox.Messages > 3 {
//
seqset := new(imap.SeqSet)
seqset.AddRange(ifrom, ito)
下面用一个for轮回从指定地位读邮件,其中go func() {}局部都是启动一个goroutine子过程(工作线程)去读取内容。
代码中From和To可能还存在编码问题,需要解决--从最后的运行成果也可以看到。

循环读取信件body
续 循环读守信件body上面是读守信内容。
如果需要读取邮件列表,则可以这样写:

列出邮件文件夹读写邮件,实在还是需要去懂得邮件协议。
一封传统的电子邮件:
From: "Tim" <tim@example.com>
To: "joe Zhang" <zhang@example.com>
Subject: Test
Date: Wed, 17 May 2020 12:02:29 -0400
Message-ID: <NDBBIAKOPKHFGPLCODIGIEKBCHAA.tim@example.com>
Hello World.
在构造上,阿里云企业邮箱功能更多,空间容量更大,大大提高企业邮箱的稳定高效性,反垃圾反病毒性能更强,邮件收发速度更快。 拥有企业邮箱可以为自己的员工设置电子邮箱,还可以根据需要设置不同的管理权限,以及部门成员之间或者公司全体员工之间的群发功能等等,这封信分为三个部分:首先是信件头,而后是一个空行,最后是信件内容。
合乎标准RFC 822。然而协定规定导致
1)非英语字符都不能在电子邮件中应用;
2)电子邮件中不能插入二进制文件(如图片);
3)电子邮件不能有附件
这导致弥补协议 MIME系列出生。
MIME对传统电子邮件的扩大,表示在它在信件头部门增加了几条语句,重要有三条
第一条是:指明这封信使用了MIME规范
MIME-Version: 1.0
第二条语句是:它表明传递的信息类型和采取的编码
Content-Type: text/plain; charset="ISO-8859-1"
Content-Type表明信息类型,缺省值为" text/plain"。它包括了主要类型(primary type)和次要类型(subtype)两个部分,两者之间用"/"分割。主要类型有9种,分离是application、audio、example、image、message、model、multipart、text、video。
常常使用的有:
text/plain:纯文本,文件扩展名.txttext/html:HTML文本,文件扩展名.htm和.htmlimage/jpeg:jpeg格式的图片,文件扩展名.jpgimage/gif:GIF格式的图片,文件扩展名.gifaudio/x-wave:WAVE格局的音频,文件扩展名.wavaudio/mpeg:MP3格式的音频,文件扩展名.mp3video/mpeg:MPEG格式的视频,文件扩展名.mpgapplication/zip:PK-ZIP格式的紧缩文件,文件扩展名.zip
如果信息的主要类型是"text",那还须指明编码类型"charset",缺省值是ASCII,也可能"ISO-8859-1"、"UTF-8"、"GB2312"等
MIME划定了第三条语句:
Content-transfer-encoding: base64
举个例子:
邮件的源码:
Date: Wed, 18 Jun 2008 18:07:51 +0800 (CST)From: xxx <xxx@163.com>To: yifeng.ruan@gmail.comMessage-ID: <14410503.1073611213783671983.JavaMail.coremail@bj163app54.163.com>Subject: =?gbk?B?xOO6ww==?=MIME-Version: 1.0Content-Type: multipart/alternative;boundary="----=_Part_287491_22998031.1213783671982"------=_Part_287491_22998031.1213783671982Content-Type: text/plain; charset=gbkContent-Transfer-Encoding: base64IAq4+b7dsr+209PQudi55raoo6yyu7XD1Nq12Le9yM66zs341b7Jz7nSz+DTprXEtqvO96Osx+vE49TaxOO1xLKpv83W0AogIArW0Ln6yr2x6tPvIC0gyO7Su7fltcTN+MLnyNXWvgoKtcS12jEy1cXNvMasyb6z/aOst/HU8s7Sw8fXt76/xOO1xM/gudjU8MjOoaPQu9C7us/X96OhtMvNvMas1Nq4vbz+wO/D5g==------=_Part_287491_22998031.1213783671982Content-Type: text/html; charset=gbkContent-Transfer-Encoding: quoted-printable<DIV> </DIV><DIV>=B8=F9=BE=DD=B2=BF=B6=D3=D3=D0=B9=D8=B9=E6=B6=A8=A3=AC=B2=BB=B5=C3=D4==DA=B5=D8=B7=BD=C8=CE=BA=CE=CD=F8=D5=BE=C9=CF=B9=D2=CF=E0=D3=A6=B5=C4=B6=AB==CE=F7=A3=AC=C7=EB=C4=E3=D4=DA=C4=E3=B5=C4=B2=A9=BF=CD=D6=D0</DIV><DIV> ......
可以看到这封信的MIME语句是:
MIME-Version: 1.0Content-Type: multipart/alternative;boundary="----=_Part_287491_22998031.1213783671982"
"Content-Type: multipart/alternative;"表明这封信的内容,是纯文本和HTML文本的混杂,阿里云邮箱是指通过网络为用户提供交流的电子信息空间,既可以为用户提供发送电子邮件的功能,又能自动地为用户接收电子邮件,同时还能对收发的邮件进行存储,但在存储邮件时,电子邮箱对邮件的大小有严格规定。另两个可能的值是multipart/mixed跟multipart/related,分辨表现"信件内容中有二进制内容"和"函件带有附件"。
"boundary="----=_Part_287491_22998031.1213783671982""表明不同信件内容的宰割线是"----=_Part_287491_22998031.1213783671982",它通常是一个很长的随机字符串。
信件内容部分又有两个子信件头:
Content-Type: text/plain; charset=gbkContent-Transfer-Encoding: base64

Content-Type: text/html; charset=gbkContent-Transfer-Encoding: quoted-printable
它们表明,第一个部分是gbk编码的纯文本,编码转换格式是base64。第二个部分是gbk编码的HTML文本,编码转化格式是quoted-printable。
 
转载请保留链接: http://hrbhzw.cn/news/show-72834.html
 
 

 
推荐图文
相关推荐
 
网站首页 | 网站地图 | 广告服务 | 网站留言 | RSS订阅