代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
GO
】
使用ssl连接发送邮件
作者:
宝仔love
/ 发布于
2014/4/3
/
965
目前支持ssl的smtp成为主流,gmail和qqmail不再支持非ssl的端口(但163的还可用),示例是为了发送程序通用以支持更多的email提供商而开发,已测试163,qq的邮箱很快而且都成功,gmail较慢有时成功有时会超时.
package main import ( "crypto/tls" "fmt" "log" "net" "net/smtp" ) func main() { host := "smtp.qq.com" port := 465 email := "xxx@qq.com" password := "xxx" toEmail := "xxx@qq.com" header := make(map[string]string) header["From"] = "test" + "<" + email + ">" header["To"] = toEmail header["Subject"] = "邮件标题" header["Content-Type"] = "text/html; charset=UTF-8" body := "我是一封电子邮件!golang发出." message := "" for k, v := range header { message += fmt.Sprintf("%s: %s\r\n", k, v) } message += "\r\n" + body auth := smtp.PlainAuth( "", email, password, host, ) err := SendMailUsingTLS( fmt.Sprintf("%s:%d", host, port), auth, email, []string{toEmail}, []byte(message), ) if err != nil { panic(err) } } //return a smtp client func Dial(addr string) (*smtp.Client, error) { conn, err := tls.Dial("tcp", addr, nil) if err != nil { log.Println("Dialing Error:", err) return nil, err } //分解主机端口字符串 host, _, _ := net.SplitHostPort(addr) return smtp.NewClient(conn, host) } //参考net/smtp的func SendMail() //使用net.Dial连接tls(ssl)端口时,smtp.NewClient()会卡住且不提示err //len(to)>1时,to[1]开始提示是密送 func SendMailUsingTLS(addr string, auth smtp.Auth, from string, to []string, msg []byte) (err error) { //create smtp client c, err := Dial(addr) if err != nil { log.Println("Create smpt client error:", err) return err } defer c.Close() if auth != nil { if ok, _ := c.Extension("AUTH"); ok { if err = c.Auth(auth); err != nil { log.Println("Error during AUTH", err) return err } } } if err = c.Mail(from); err != nil { return err } for _, addr := range to { if err = c.Rcpt(addr); err != nil { return err } } w, err := c.Data() if err != nil { return err } _, err = w.Write(msg) if err != nil { return err } err = w.Close() if err != nil { return err } return c.Quit() }
试试其它关键字
ssl连接
同语言下
.
将SQL查询结果转换成map数组
.
德州扑克的核心规则算法
.
格式化时间
.
超简单QR二维码生成器
.
检查命令位置,替代 mac 下 whereis
.
百度 API 翻译工具
.
鼠标事件处理
.
快速排序
.
鸡尾酒排序
.
冒泡排序
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
宝仔love
贡献的其它代码
(
9
)
.
将xml解析成对应的html
.
用 Java 语言将 utf8 编码的汉字还原
.
使用ssl连接发送邮件
.
局域网IP扫描
.
自动化批量执行脚本
.
php生成微博短网址的算法
.
perl中的队列
.
php+shell检测文件类型
.
mysql存储过程的游标和控制结构
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3