go语言实现发送邮件带附件

package main

import (
  "fmt"
  "net/smtp"
  "bytes"  
  "encoding/base64"
  "io/ioutil"
)

const (
   HOST        ="smtp.126.com"
   SERVER_ADDR ="smtp.126.com:25"
   USER        ="***@126.com"    //发送邮件的邮箱
   PASSWORD    ="******"        //发送邮件邮箱的密码
)

func main() {

  to :="1*****@qq.com"
 
  mime := bytes.NewBuffer(nil)
  //设置邮件  
  boundary :="http://dojava.cn"
  mime.WriteString("From: 邮件名称<"+USER+">\r\nTo: "+to+"\r\nSubject: 老师数据导出\r\nMIME-Version: 1.0\r\n")  
  mime.WriteString("Content-Type: multipart/mixed; boundary="+boundary+"\r\n\r\n")  

  mime.WriteString("--"+boundary+"\r\n")    //自定义邮件内容分隔符
 
  //邮件正文
  html :="导出数据已通过邮件发送到您的邮箱,请下载后用excel打开"  //邮件正文
  mime.WriteString("Content-Type: text/html; charset=utf-8\r\n\r\n")  //text/html html text/plain 纯文本
  mime.WriteString(html)
  mime.WriteString("\r\n\r\n\r\n")

  //附件
  mime.WriteString("--"+boundary+"\r\n")
  mime.WriteString("Content-Type: application/vnd.ms-excel\r\n")   //application/octet-stream
  mime.WriteString("Content-Transfer-Encoding: base64\r\n")
  mime.WriteString("Content-Disposition: attachment; filename=\""+fileName+"\"")
  mime.WriteString("\r\n\r\n")

  //将文件转为base64

  //读取并编码文件内容  
  //attaData, err := ioutil.ReadFile("../bapi/main.go")  
  fileName :="./Workbook.xls"
  attaData, err := ioutil.ReadFile(fileName)
  if err!= nil {  
     fmt.Print(err)  

  } 


  b :=make([]byte, base64.StdEncoding.EncodedLen(len(attaData)))  
  base64.StdEncoding.Encode(b, attaData)  
  mime.Write(b)
  mime.WriteString("\r\n")
  mime.WriteString("--"+boundary+"--")

 
  str3 := mime.String()
  auth:= smtp.PlainAuth("", USER, PASSWORD, HOST) 
  errs := smtp.SendMail(SERVER_ADDR,auth,USER,[]string{to}, []byte(str3))
  if errs!= nil {
    fmt.Println(errs)
  }else{
    fmt.Println("邮件发送成功!")
  }
 
}


/**  //smtp原始数据
From: 发送数据啊 <**@126.com>
Date: Fri, 03 Nov 2017 23:13:02 +0800
To: 1**@qq.com
Subject: 老师数据差点
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=http://dojava.cn

--http://dojava.cn
Content-Type: text/plain; charset=utf-8

数据查看啊 


--http://dojava.cn
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="文件名测试.go"

cGFja2FnZSBtYWluCgppbXBvcnQgKAoJXyAiYmFwaS9yb3V0ZXJzIgoKCSJnaXRodWIuY29tL2Fz
dGF4aWUvYmVlZ28iCgkiZ2l0aHViLmNvbS9hc3RheGllL2JlZWdvL29ybSIKCV8gImdpdGh1Yi5j
b20vZ28tc3FsLWRyaXZlci9teXNxbCIKKQoKZnVuYyBpbml0KCkgewoJb3JtLlJlZ2lzdGVyRGF0
YUJhc2UoImRlZmF1bHQiLCAibXlzcWwiLCAicm9vdDpyb290QHRjcCgxMjcuMC4wLjE6MzMwNikv
bXliYnMiKQp9CgpmdW5jIG1haW4oKSB7CglpZiBiZWVnby5CQ29uZmlnLlJ1bk1vZGUgPT0gImRl
diIgewoJCWJlZWdvLkJDb25maWcuV2ViQ29uZmlnLkRpcmVjdG9yeUluZGV4ID0gdHJ1ZQoJCWJl
ZWdvLkJDb25maWcuV2ViQ29uZmlnLlN0YXRpY0RpclsiL3N3YWdnZXIiXSA9ICJzd2FnZ2VyIgoJ
fQoJYmVlZ28uUnVuKCkKfQo=
--http://dojava.cn-- 

**/


原文链接 : http://dojava.cn/post/view/62.html原文链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值