Go 每日一库之 email

go邮件发送 依赖安装 go get gopkg.in/gomail.v2 示例目录结构 email | demo.go //示例文件 | email | email.go //lib文件 需要修改相应的smtp配置 详细内容如下: demo.go代码: package main import ( "./email" ) func main () { msg := m... 阅读详情

简介

程序中时常有发送邮件的需求。有异常情况了需要通知管理员和负责人,用户下单后可能需要通知订单信息,电商平台、中国移动和联通都有每月账单,这些都可以通过邮件来推送。还有我们平时收到的垃圾邮件大都也是通过这种方式发送的😭。那么如何在 Go 语言发送邮件?本文我们介绍一下email库的使用。

快速使用

这个库的使用快不了,为什么呢?

先安装库,这个自不必说:

$ go get github.com/jordan-wright/email

我们需要额外一些工作。我们知道邮箱使用SMTP/POP3/IMAP等协议从邮件服务器上拉取邮件。邮件并不是直接发送到邮箱的,而是邮箱请求拉取的。
所以,我们需要配置SMTP/POP3/IMAP服务器。从头搭建固然可行,而且也有现成的开源库,但是比较麻烦。现在一般的邮箱服务商都开放了SMTP/POP3/IMAP服务器。
我这里拿 126 邮箱来举例,使用SMTP服务器。当然,用 QQ 邮箱也可以。

  • 首先,登录邮箱;
  • 点开顶部的设置,选择POP3/SMTP/IMAP;
  • 点击开启IMAP/SMTP服务,按照步骤开启即可,有个密码设置,记住这个密码,后面有用。

然后就可以编码了:

package main

import (
  "log"
  "net/smtp"

  "github.com/jordan-wright/email"
)

func main() {
  e := email.NewEmail()
  e.From = "dj <xxx@126.com>"
  e.To = []string{"935653229@qq.com"}
  e.Subject = "Awesome web"
  e.Text = []byte("Text Body is, of course, supported!")
  err := e.Send("smtp.126.com:25", smtp.PlainAuth("", "xxx@126.com", "yyy", "smtp.126.com"))
  if err != nil {
    log.Fatal(err)
  }
}

这里为了我的信息安全,我把真实信息都隐藏了。代码中xxx替换成你的邮箱账号,yyy替换成上面设置的密码。

代码步骤比较简单清晰:

  • 先调用NewEmail创建一封邮件;
  • 设置From发送方,To接收者,Subject邮件主题(标题),Text设置邮件内容;
  • 然后调用Send发送,参数1是 SMTP 服务器的地址,参数2为验证信息。

运行程序将会向我的 QQ 邮箱发送一封邮件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pXgqRYoR-1581903048970)(https://darjun.github.io/img/in-post/godailylib/email1.png#center)]

有的邮箱会把这种邮件放在垃圾箱中,例如 QQ😭。如果收件箱找不到,记得到垃圾箱瞅瞅。

抄送

平常我们发邮件的时候可能会抄送给一些人,还有一些人要秘密抄送😄,即 CC(Carbon Copy)和 BCC (Blind Carbon Copy)。
email我们也可以设置这两个参数:

package main

import (
  "log"
  "net/smtp"

  "github.com/jordan-wright/email"
)

func main() {
  e := email.NewEmail()
  e.From = "dj <xxx@126.com>"
  e.To = []string{"935653229@qq.com"}
  e.Cc = []string{"test1@126.com", "test2@126.com"}
  e.Bcc = []string{"secret@126.com"}
  e.Subject = "Awesome web"
  e.Text = []byte("Text Body is, of course, supported!")
  err := e.Send("smtp.126.com:25", smtp.PlainAuth("", "xxx@126.com", "yyy", "smtp.126.com"))
  if err != nil {
    log.Fatal(err)
  }
}

还是一样的,抄送的邮箱自己替换test1/test2/secret用自己的。

运行程序将会向我的 QQ 邮件发送一封邮件,同时抄送一封到我另一个 126 邮箱:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dDwp9Ltq-1581903048971)(https://darjun.github.io/img/in-post/godailylib/email2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtShWeOw-1581903048972)(https://darjun.github.io/img/in-post/godailylib/email3.png)]

HTML 格式

发送纯文本,邮件不太美观。email支持发送 HTML 格式的内容。与发送纯文本类似,直接设置对象的HTML字段:

package main

import (
  "log"
  "net/smtp"

  "github.com/jordan-wright/email"
)

func main() {
  e := email.NewEmail()
  e.From = "dj <xxx@126.com>"
  e.To = []string{"935653229@qq.com"}
  e.Cc = []string{"xxx@126.com"}
  e.Subject = "Go 每日一库"
  e.HTML = []byte(`
  <ul>
<li><a "https://darjun.github.io/2020/01/10/godailylib/flag/">Go 每日一库之 flag</a></li>
<li><a "https://darjun.github.io/2020/01/10/godailylib/go-flags/">Go 每日一库之 go-flags</a></li>
<li><a "https://darjun.github.io/2020/01/14/godailylib/go-homedir/">Go 每日一库之 go-homedir</a></li>
<li><a "https://darjun.github.io/2020/01/15/godailylib/go-ini/">Go 每日一库之 go-ini</a></li>
<li><a "https://darjun.github.io/2020/01/17/godailylib/cobra/">Go 每日一库之 cobra</a></li>
<li><a "https://darjun.github.io/2020/01/18/godailylib/viper/">Go 每日一库之 viper</a></li>
<li><a "https://darjun.github.io/2020/01/19/godailylib/fsnotify/">Go 每日一库之 fsnotify</a></li>
<li><a "https://darjun.github.io/2020/01/20/godailylib/cast/">Go 每日一库之 cast</a></li>
</ul>
  `)
  err := e.Send("smtp.126.com:25", smtp.PlainAuth("", "xxx@126.com", "yyy", "smtp.126.com"))
  if err != nil {
    log.Fatal("failed to send email:", err)
  }
}

发送结果:

注意,126 的 SMTP 服务器检测比较严格,加上 HTML 之后,很容易被识别为垃圾邮件不让发送,这时 CC 自己就 OK 了。

附件

添加附件也很容易,直接调用AttachFile即可:

package main

import (
  "log"
  "net/smtp"

  "github.com/jordan-wright/email"
)

func main() {
  e := email.NewEmail()
  e.From = "dj <xxx@126.com>"
  e.To = []string{"935653229@qq.com"}
  e.Subject = "Go 每日一库"
  e.Text = []byte("请看附件")
  e.AttachFile("test.txt")
  err := e.Send("smtp.126.com:25", smtp.PlainAuth("", "xxx@126.com", "yyy", "smtp.126.com"))
  if err != nil {
    log.Fatal("failed to send email:", err)
  }
}

收到的邮件:

连接池

实际上每次调用Send时都会和 SMTP 服务器建立一次连接,如果发送邮件很多很频繁的话可能会有性能问题。email提供了连接池,可以复用网络连接:

package main

import (
  "fmt"
  "log"
  "net/smtp"
  "os"
  "sync"
  "time"

  "github.com/jordan-wright/email"
)

func main() {
  ch := make(chan *email.Email, 10)
  p, err := email.NewPool(
    "smtp.126.com:25",
    4,
    smtp.PlainAuth("", "leedarjun@126.com", "358942617ldj", "smtp.126.com"),
  )

  if err != nil {
    log.Fatal("failed to create pool:", err)
  }

  var wg sync.WaitGroup
  wg.Add(4)
  for i := 0; i < 4; i++ {
    go func() {
      defer wg.Done()
      for e := range ch {
        err := p.Send(e, 10*time.Second)
        if err != nil {
          fmt.Fprintf(os.Stderr, "email:%v sent error:%v\n", e, err)
        }
      }
    }()
  }

  for i := 0; i < 10; i++ {
    e := email.NewEmail()
    e.From = "dj <leedarjun@126.com>"
    e.To = []string{"935653229@qq.com"}
    e.Subject = "Awesome web"
    e.Text = []byte(fmt.Sprintf("Awesome Web %d", i+1))
    ch <- e
  }

  close(ch)
  wg.Wait()
}

上面程序中,我们创建 4 goroutine 共用一个连接池发送邮件,发送 10 封邮件后程序退出。为了等邮件都发送完成或失败,程序才退出,我们使用了sync.WaitGroup。

邮箱被轰炸了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rm5FRAej-1581903048974)(https://darjun.github.io/img/in-post/godailylib/email6.png#center)]

由于使用了 goroutine,邮件顺序不能保证。

总结

本文介绍了如何使用 Go 程序发送邮件,程序代码都已经放在 GitHub 上https://github.com/darjun/go-daily-lib/tree/master/email。所有代码都通过测试,大家请放心食用~

大家如果发现好玩、好用的 Go 语言库,欢迎到 Go 每日一库 GitHub 上提交 issue😄

参考

  1. email GitHub:https://github.com/jordan-wright/email
  2. Go 每日一库 GitHub:https://github.com/darjun/go-daily-lib

我

我的博客

欢迎关注我的微信公众号【GoUpUp】,共同学习,一起进步~

本文由博客一文多发平台 OpenWrite 发布!

Go语言中的简单邮件发送实践:goemail库使用指南 goemail是Go语言的一个库,它提供了简单易用的API来发送邮件。这个库支持SMTP协议,可以轻松集成到任何Go应用程序中,无论是Web应用还是命令行工具。简单邮件传输协议(SMTP)是用于电子邮件传输的标准协议。它定义了邮件服务器之间以及邮件客户端和服务器之间的交互规则。SMTP工作在TCP/IP协议之上,通常在端口25、465(SSL)或587(TLS)上运行。SMTP服务器处理邮件的发送和中继,而接收邮件则通常由其他协议(如IMAP或POP)负责。 阅读详情

相关推荐

goemail:go语言简单发送邮件,不支持附件,可以发送验证码,通知等

goemail:go语言简单发送邮件,不支持附件,可以发送验证码,通知等

Go语言库系列之email

导读 大家好我是平也,今天跟大家介绍一款用来发送邮件的Go语言库email,目前星星1.3k,非常好用。 极速上手 准备工作 初始化项目 go get github.com/jordan-wright/email 本示例项目结构 . ├── go.mod ├── go.sum └── main.go 开启邮箱SMTP服务,以163邮箱为例,需要先登录到邮箱后台点击开启按钮,在发送完短信之后,会获取到一个授权码,将授权码保存,后面需要用到。 代码示例 首先配置好邮件内容 e := email...

深蓝旭的博客 3856

用于电子邮件验证的Go库,无需发送任何电子邮件。-Golang开发

email-verifier:envelope:一个Go库,用于在不发送任何电子邮件的情况下进行电子邮件验证。 功能电子邮件地址验证:验证字符串是否包含电子邮件验证程序:envelope:一个Go库,用于进行电子邮件验证而不发送任何电子邮件。 功能电子邮件地址验证:验证字符串是否包含有效的电子邮件。 通过SMTP进行电子邮件验证查找:对传递的电子邮件MX验证执行电子邮件验证:检查DNS MX记录中给定域名的其他验证:包括免费电子邮件提供商检查,角色帐户验证,一次性电子邮件地址(DEA)验证电子邮件可达性:检查对仙蒂的信心

50.Go实现邮件发送

程序中时常有发送通知的需求。有异常情况了需要通知管理员和负责人,用户下单后可能需要通知订单信息,电商平台、中国移动和联通都有每月账单,这些都可以通过飞书、微信、钉钉、短信或者邮件来推送。之前我们已经介绍过如果发送飞书消息7. 飞书机器人发送交互式信息,本次我们介绍下如何发送邮件,其实我们平时收到的垃圾邮件大都也是通过这种方式发送的。那么如何在Go语言发送邮件?本文我们介绍一下email库的使用。

YouMing_Li的博客 3180

什么是Merkle树?用“文件柜”类比理解区块链的核心技术

Merkle树是一种用于区块链的数据结构,像一个高效的“文件柜”,用于存储和验证大量交易数据。比特币通过Merkle树将交易哈希组织成树状结构,层层汇总,最终生成一个唯一的根哈希,存储在区块头中。这种设计大幅减少数据存储和验证成本,支持快速校验交易的完整性和存在性。Merkle树通过密码学保证数据不可篡改,广泛应用于比特币、区块链及其他分布式系统。它的优势在于高效、轻量和安全,尤其适合轻节点验证和数据同步。理解Merkle树就像掌握区块链的“索引秘籍”,是Web3世界的关键技术。

在路上的专栏 1192

华硕电脑Win10改Win7系统:BIOS设置详解

通过上述步骤,华硕电脑用户可以将系统从Windows 10更改为Windows 7。虽然这个过程可能涉及一些技术细节和潜在的风险(如数据丢失和驱动不兼容),但只要按照指南仔细操作并做好准备工作,大多数用户应该能够成功完成系统回滚。请记住,在进行任何系统更改之前都要备份重要数据,并确保已了解所有潜在的风险和限制。希望本文能够帮助到需要回滚到Windows 7的华硕电脑用户!

nntxthml的博客 2262

每日一库之Go 强大而灵活的电子邮件库:email

发送邮件是一个很常见的需求:用户邮箱验证、邮箱召回等。Go 语言标准库自带 net/smtp 库,实现了 smtp 协议,用于发送邮件。然而这个库比较原始,使用不方便,而且官方声明不再增...

轩脉刃的刀光剑影 1万+

YOLOv11涨点改进 | 全网创新首发、主干改进篇 | CVPR 2025 | RAVLT主干让 YOLOv11 更加强大!通过增强线性注意力机制,特别在小目标和复杂背景的检测上表现突出

本文提出RAVLT主干网络,通过改进YOLOv11的空间特征建模能力,显著提升小物体和复杂背景检测性能。RAVLT采用秩增强线性注意力(RALA)机制,在保持线性计算复杂度的同时解决传统线性注意力低秩问题。RALA通过增强KV缓冲区和输出特征矩阵的秩,提高特征多样性和建模能力。实验表明,RAVLT在ImageNet-1k上达到84.4% Top-1准确率,仅需2600万参数和4.6GFLOPs,性能优于现有线性注意力模型。文章详细介绍了RAVLT模块结构、实现原理及在YOLOv11中的集成方法,包含四种主干

Ai缝合怪、助力小伙伴高效发论文 637

go获取byte_每日一库之Go 强大而灵活的电子邮件库:email

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习Go语言发送邮件是一个很常见的需求:用户邮箱验证、邮箱召回等。Go 语言标准库自带 net/smtp 库,实现了 smtp 协议,用于发送邮件。然而这个库比较原始,使用不方便,而且官方声明不再增加新功能。于是乎出现了一些强大的第三方邮件库,今天推荐的这个库就是其中之一。项目地址:https://github.com/jo...

weixin_36236823的博客 4107

选课系统进不去?我用 Python 做了个“捡漏挂机”脚本,全自动监控空余名额

频率控制:脚本请求频率不要太高(建议间隔 3-5 秒以上),否则可能被教务系统封 IP,甚至会被教务处请喝茶。仅供学习:本文旨在通过选课场景教学requests和网络抓包原理,请勿用于非法用途或破坏公平性。刷新页面 -> 等待加载 -> 用眼睛看人数 -> 没满?-> 点击选课 -> 确认这个流程最大的瓶颈在于**“等待加载”和“人的反应时间”**。网页加载需要渲染 HTML、CSS、图片,而 Python 脚本只需要请求一个微小的 JSON 数据接口,速度是浏览器的10 倍以上。fill:#333;

BUG猿的博客 292

Android Audio录音——AudioRecord回声消除(九)

在语音通话或录音场景中,回声(Acoustic Echo)通常是指说话的声音从对方的扬声器播放出来,又被对方的麦克风拾取,然后有被传回来,导致我们听到了自己延迟了一段时间的重复声音。

小旭的专栏 1404

gmail api 发送邮件_每日一库之Go 强大而灵活的电子邮件库:email

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言发送邮件是一个很常见的需求:用户邮箱验证、邮箱召回等。Go 语言标准库自带 net/smtp 库,实现了 smtp 协议,用于发送邮件。然而这个库比较原始,使用不方便,而且官方声明不再增加新功能。于是乎出现了一些强大的第三方邮件库,今天推荐的这个库就是其中之一。项目地址:https://github.com/jordan-...

weixin_39558317的博客 4670

UE4 Unlua源码解析8 - Lua与C++之间的参数转换的实现原理

Lua与C++之间的参数转换的实现原理

TurboQ珞珈 898

golang 日志分析_每日一库之 logrus 日志使用教程

点击上方蓝色“Go语言中文网”关注,回复「电子书」领全套Go资料golang 日志库 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,但是在 golang 的世界里,没有一个日志库像 slf4j 那样在 Java 中具有绝对统治地位.golang ...

weixin_30220993的博客 2411

【银河麒麟服务器操作系统】安装英伟达4090D显卡驱动操作指南

本文详细介绍了在银河麒麟高级服务器操作系统V10SP3-2403-X86版本上安装NVIDIA RTX4090D显卡驱动的完整流程。主要内容包括:准备工作检查、开源驱动禁用、运行级别切换、依赖包安装以及交互式安装过程中的关键选项选择(32位库选Yes、X配置选No)。通过禁用nouveau驱动、重建内核引导等步骤确保驱动安装成功,最后通过nvidia-smi命令验证驱动安装情况。文档提供了操作检查表和安装流程图,帮助用户在银河麒麟系统上顺利完成显卡驱动部署。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 3104

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Go使用gomail发送邮件详解,及使用smtp、email发送邮件

package main import ( "crypto/tls" "fmt" "gopkg.in/gomail.v2" ) func main() { test1() } func test1() { message := ` <p> Hello %s,</p> <p style="text-indent:2em">test test test test test test test test test test test test.

Lawson的博客 4万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【亲测免费】 Go邮件库Gomail使用教程

**Gomail** 是一个用于Go语言的简单高效的邮件发送库。它具有良好的测试覆盖率和详细文档,使得在Go中发送电子邮件变得非常简便。该库仅依赖于Go标准库,遵循最佳实践并提供了一些默认设置。 ### 主要特性 - 简洁易用的API接口 - 支持多种邮件类型(如纯文本、HTML、附件等) - 安全的SMTP连接(包括STARTTLS和SSL/TLS) - 多地址处理(如收件人、抄送人、密送人)...

gitblog_00981的博客 7625

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Golang使用gomail发送邮件

【代码】Golang使用gomail发送邮件。

weixin_45941687的博客 3764

Go每日一库之Flag

上面我们介绍了使用定义选项,这种方式需要我们先定义变量,然后变量的地址。还有一种方式,调用flag.Type(其中Type可以为等)会自动为我们分配变量,返回该变量的地址。除了使用时需要解引用,其它与前一种方式基本相同。flag库并没有显示支持短选项,但是可以通过给某个相同的变量设置不同的选项来实现。即两个选项共享同一个变量。由于初始化顺序不确定,必须保证它们拥有相同的默认值。否则不传该选项时,行为是不确定的。除了使用flag库提供的选项类型,我们还可以自定义选项类型。= nil {

二进制杯莫停的博客 833

antd-mobile PullToRefresh 下拉刷新组件完全指南:状态机、配置项与源码级原理解析

下拉刷新是移动端列表页最常用的交互之一:用户通过手指在页面顶部向下拖动,触发数据更新。ant-design-mobile(antd-mobile)提供的 `PullToRefresh` 组件,以"状态机驱动 + 手势监听"的方式封装了这一能力。本文以 [pull-to-refresh/index.zh.md](https://link.gitcode.com/i/27f4de99fcd33c130

gitblog_00027的博客 526

Go每日一库之8:cast(类型转换)

cast库能在几乎所有常见类型之间转换,使用非常方便。代码量也很小,有时间建议读读源码。完整示例代码在GitHub上。ps: 本以为春节就这么几天,偷个懒,没想到。。。

dz45693的专栏 545

Golang- 邮件服务,发送邮件

Golang- 邮件服务,发送邮件

m0_47195133的博客 1204

go语言发送邮件email,并支持附件并直接在正文中展示图片

【代码】go语言发送email,并支持附件并直接在正文中展示图片。

cnngavij的博客 1419

Go语言邮件神器email库:5分钟快速上手邮件发送

还在为Go语言邮件发送而烦恼吗?😅 传统的net/smtp包配置复杂、功能有限,而email库的出现彻底改变了这一现状!这款强大的Go语言邮件库让邮件发送变得前所未有的简单和灵活。 ## 📧 为什么选择email库? email库是一个专为人类设计的邮件接口,它提供了: - **简单易用的API** - 几行代码就能发送邮件 - **完整的邮件功能** - 支持收件人、抄送、密送、主题等

gitblog_00116的博客 881

连接池的总结

最近项目中用到了spring的连接池,现在记录一下自己认为对线程池的一些理解。 一、原理       由于数据库连接是一种关键的有限的资源,所以对数据库连接的管理会影响到整个项目的性能,对那些需要高性能的项目显得至关重要。 连接池能够很有效的提升性能,而其的原理如下:       系统在启动的时候创建默认数量的数据库连接,然后保存到内存中,而在系统运行过程中不再在使用数据库的时候新建一个...

沉默王二 2806
上一篇: Go 每日一库之 godotenv
下一篇: Go 每日一库之 dig
darjun
博客等级 码龄10年 109粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值