GoLang语言:邮件群发器

好久没有更新博客了,这次又带来了一段GO语言的代码(没办法,只会写代码了)。

Go语言邮件群发器 main.go

// Multi-SendEmail project main.go
package main

import (
    "bufio"
    "errors"
    "fmt"
    "io"
    "io/ioutil"
    "net/smtp"
    "os"
    "strings"
    "time"
)

func SendMail(user, password, host, to, subject, body, mailtype string) error {
    hp := strings.Split(host, ":")
    auth := smtp.PlainAuth("", user, password, hp[0])
    var content_type string
    if mailtype == "html" {
        content_type = "Content-Type: text/html;charset=UTF-8"
    } else {
        content_type = "Content-Type: text/plain;charset=UTF-8"
    }
    msg := []byte("To: " + to + "\r\nFrom: " + user + "<" + user + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
    send_to := strings.Split(to, ";")
    err := smtp.SendMail(host, auth, user, send_to, msg)
    return err
}

func readLine2Array(filename string) ([]string, error) {
    result := make([]string, 0)
    file, err := os.Open(filename)
    if err != nil {
        return result, errors.New("Open file failed.")
    }
    defer file.Close()
    bf := bufio.NewReader(file)
    for {
        line, isPrefix, err1 := bf.ReadLine()
        if err1 != nil {
            if err1 != io.EOF {
                return result, errors.New("ReadLine no finish")
            }
            break
        }
        if isPrefix {
            return result, errors.New("Line is too long")
        }
        str := string(line)
        result = append(result, str)
    }
    return result, nil
}

func main() {
    fmt.Println("start...")
    user := "邮箱@qq.com"
    password := "密码"
    host := "smtp.qq.com:25"   //QQ为例
    subject := "邮件标题"

    sendTo, err := readLine2Array("send.txt")
    if err != nil {
        fmt.Println(err)
        return
    }

    content, err := ioutil.ReadFile("email.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    body := string(content)

    for i := 0; i < len(sendTo); i++ {
        to := sendTo[i]
        fmt.Println("Send email to " + to)
        err = SendMail(user, password, host, to, subject, body, "html")
        if err != nil {
            fmt.Println("send mail error!")
            fmt.Println(err)
            i--
            time.Sleep(600 * time.Second)
        } else {
            fmt.Println("send mail success!")
        }
    }
}

使用说明:

编译出exe文件,把要发送的邮箱一行一个放入send.txt中,邮件内容放入email.txt中(HTML格式),运行。

这代码我也有在用,有很多不灵活的地方,仅供参考。

============================================

刚开始学着写一些博客,写得不好的地方请见谅,觉得学到了的就赏脸关注下吧~

我的QQ群(PHP)336533596,欢迎加入。相互交流,聊天吹牛~

时间: 2024-11-10 12:28:31

GoLang语言:邮件群发器的相关文章

超级邮件群发机12.32完美破解版---日轻松发万封邮件,方法对了每天发不了万封你骂我

前几天发了一个邮件群发工具,很多人回复,被推荐和置顶,感觉很开心,上回第二次发贴就有这么多的朋友支持我,有你们的支持是我奋斗的动力,今后将提供更多更优质的绝对给力小工具给大家,上回发了贴后很多人加我QQ问我怎么用,说真的那个软件非常简单,一看就会用,但有些朋友问我怎么发几封就发的出收不到了,这里我不再多讲,关键是你发的内容是否合法,再好的软件你拼命发重复的内容,肯定容易被和谐,软件显示发送成功,可能你收不到,这也正常,这需要你有更多的发件箱了.还有些人说软件不太强大,邮件内容只能写文字,没有高级

支持10种语言的在线版邮件群发软件-Zoho Campaigns

发邮件早已成为我们工作与生活中不可或缺的一项任务.从现在开始,Zoho Campaigns支持多语言版本,让您不论在世界的哪个角落工作,都可以用上当地的语言.现在除了英语,您还可以使用以下这些语言: 中文 荷兰语 法语 德语 匈牙利语 意大利语 日语 葡萄牙语 西班牙语 随着Zoho CRM 10用户免费版的普及,产品相互集成的功能受到用户的推崇.越来越多的CRM用户喜欢与Campaigns集成起来用.现在,这两种产品可以使用同一种语言了.如果您觉得光语言本地了还不够,邮件模板也要本地才行,您可

C++实现邮件群发的方法

这篇文章主要介绍了C++实现邮件群发的方法,较为详细的分析了邮件发送的原理与C++相关实现技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C++实现邮件群发的方法.分享给大家供大家参考.具体如下:关于生成随机QQ邮箱不精确的问题,在之后版本打算另写一个采集器插件进行帐号采集,所以,这个软件只用来进行内容发送,邮箱进行随机生成 如果你已经有采集来的QQ号,请复制到SendList.txt 替换内容即可可以直接复制HTML代码到邮件内容,保存即可.目前邮件内容最大设置为10000字节,如

易宝典文章——玩转Office 365中的Exchange Online服务 之二十四 配置垃圾邮件筛选器反垃圾邮件

如果希望实现基于发件人邮件地址,或者需要拒绝某个域的邮件,可以通过Exchange Online提供的垃圾邮件筛选器策略来解决.垃圾邮件筛选器策略除了能够实现上述的黑名单筛选外,还支持白名单筛选,基于国别来进行筛选,比如阻止某岛国语言的邮件,从某小人国发来的邮件等.此外,垃圾邮件筛选器策略还定义做针对不同级别的垃圾邮件如何进行处理,是标注,还是放入垃圾箱,或者是进行隔离等.一.了解默认的垃圾邮件筛选器策略在EAC中,导航到"保护",定位到"垃圾邮件筛选器"选项卡,选

golang语言编译的二进制可执行文件为什么比 C 语言大(转载)

最近一位朋友问我"为什么同样的hello world 入门程序"为什么golang编译出来的二进制文件,比 C 大,而且大很多.我做了个测试,来分析这个问题.C 语言的hello world程序: 1 2 3 4 5 #include <stdio.h> int main() {     printf("hello world!\n");     return 0; } golang 语言的hello world程序: 1 2 3 4 5 6 7 pac

为什么要用golang语言进行区块链编程开发?

Go语言现在常常被用来做去中心化系统(decentralised system).其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地. 我们在决定做Karachain的时候,考量(benchmark)了C,C++, Java, 甚至NodeJs,我们也试着用一些算法来作为考量标准.而现在,我表示我们正在用Go来实现此目标,并且感觉不错. 啊,现在建造一个区块链,恰如当时建造一个操作系统! 我们在建造像区块链平台这样复杂的东西时,把注意力放在了那些核心问题上.经过差不

RabbitMQ官方教程一Hello World(GOLANG语言实现)

介绍 RabbitMQ是消息中间件:它接受并转发消息. 您可以将其视为邮局系统:将要发送的邮件放在邮箱中时, 可以确保邮递员最终将邮件传递给收件人. 以此类推,RabbitMQ是一个邮箱,一个邮局和一个邮递员. RabbitMQ与邮局之间的主要区别在于, 它不处理纸张,而是接收,存储和转发数据消息的二进制数据. 以下是RabbitMQ和消息发送的术语 Producer:生产者.负责生产消息. Queue:队列.负责存储消息.队列在RabbitMQ中充当邮箱的角色,消息传递到RabbitMQ中,只

爱博邮件群发系统专业版Version 10.5.2Build 429破解版

软件名称:爱博邮件群发系统专业版Version 10.5.2Build 429破解版 (此软件上一个版本小众论坛发布过破解版,大家对这个软件的反响都比较好,但是上一个版本的破解依然是存在问题,发送20封邮件会自动停止.这一次新版的破解已经更新此问题.目前算是比较完美的破解了,小瑕疵是不能批量导入发送帐号)去除了导入20个邮箱限制去除了发送20个邮箱限制去除了官方发送所带尾巴 软件介绍:只要一款软件,企业邮局群发.外贸邮件群发全部搞定! 最新版本的爱博邮件群发系统支持SMTP投递模式,支持企业邮箱

学习Golang语言(6):类型--切片

学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Golang语言(5):类型--数组 学习Golang语言(6):类型--切片 在很多应用场景中,数组不能够满足我们的需求.在初始定义数组时,我们并不知道数组所需的长度.因此,我们需要一个大小可以动态变化的数组(动态数组) 在Go语言中,这种"动态数组"成为slice(切片). 但是实际上slic