本文整理汇总了Golang中net/smtp.Client类的典型用法代码示例。如果您正苦于以下问题:Golang Client类的具体用法?Golang Client怎么用?Golang Client使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Client类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: smtpSendMailPart2
func smtpSendMailPart2(c *smtp.Client, smtpHost string, a smtp.Auth, from string, to []string, msg []byte) (err error) {
defer c.Close()
if err = c.Hello("localhost"); err != nil {
return err
}
if ok, _ := c.Extension("STARTTLS"); ok {
config := &tls.Config{ServerName: smtpHost}
if err = c.StartTLS(config); err != nil {
return err
}
}
if a != nil {
if ok, _ := c.Extension("AUTH"); ok {
if err = c.Auth(a); err != nil {
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()
}
示例2: Send
func (DefaultSender) Send(from, to, content string) error {
var (
err error
c *smtp.Client
auth smtp.Auth
)
log.Println("mail: sending mail to " + to)
auth, err = DefaultSender{}.auth()
if nil != err {
return err
}
c, err = smtp.Dial(MAIL_HOST + ":" + MAIL_PORT)
if nil != err {
return err
}
defer c.Close()
tlc := &tls.Config{
InsecureSkipVerify: true,
ServerName: MAIL_HOST,
}
if err = c.StartTLS(tlc); err != nil {
log.Println("tls error " + err.Error())
return err
}
c.Auth(auth)
c.Mail(from)
c.Rcpt(to)
// Send the email body.
wc, err := c.Data()
if err != nil {
log.Fatal(err)
}
defer wc.Close()
buf := bytes.NewBufferString(content)
if _, err = buf.WriteTo(wc); err != nil {
log.Fatal(err)
}
if err != nil {
log.Println("email: failed to write " + err.Error())
return err
}
return err
}
示例3: addRcpt
func addRcpt(c *smtp.Client, address []string) error {
for _, addr := range address {
if err := c.Rcpt(addr); err != nil {
return err
}
}
return nil
}
示例4: sendMail
func sendMail(c *conf.ConfigFile, e Envelope) error {
var addr string
var err error
var conn *smtp.Client
addr, _ = c.GetString("main", "smtp")
conn, err = smtp.Dial(addr)
if err != nil {
return err
}
if err = conn.Mail(e.Sender); err != nil {
return err
}
for _, addr := range e.Recipients {
if err = conn.Rcpt(addr); err != nil {
return err
}
}
w, err := conn.Data()
if err != nil {
return err
}
io.Copy(w, serializeMail(e))
conn.Quit()
return nil
}
示例5: handleDATA
func handleDATA(rec *SMTPRecord, c *smtp.Client, proxy *SMTPSession) error {
proxy.Reply(354, "Go Ahead.")
setDeadline(proxy.base.Conn, proxy.base.Timeouts.DataTimeout)
buf := &bytes.Buffer{}
reader := textproto.NewReader(proxy.reader).DotReader()
_, err := io.CopyN(buf, reader, int64(proxy.base.MaxSize))
if err == io.EOF || err == nil {
proxy.Reply(250, "Thank you.")
bu := buf.Bytes()
datawriter, err := c.Data()
if err != nil {
return err
}
n, err := datawriter.Write(bu)
log.Debug("Data Submitted total written %d!", n)
if err != nil {
return err
}
err = datawriter.Close()
if err != nil {
return err
}
proxy.Reset()
return nil
}
if err != nil {
proxy.Reply(254, "Unable to recieve data.")
return err
}
_, err = io.Copy(ioutil.Discard, reader)
proxy.Reply(552, fmt.Sprintf("Message exceeded max message size of %d bytes", proxy.base.MaxSize))
if err != nil {
return err
}
return nil
}
示例6: SendEmail
func SendEmail(address string, from string, toArray []string, subject string, message []byte) (string, *gkerr.GkErrDef) {
var err error
var conn *smtp.Client
var dataWriter io.WriteCloser
var gkErr *gkerr.GkErrDef
var sendId string
conn, err = smtp.Dial(address)
if err != nil {
gkErr = gkerr.GenGkErr("smtp.Dial", err, ERROR_ID_SMTP_DIAL)
return "", gkErr
}
conn.Mail(from)
for _, adr := range toArray {
conn.Rcpt(adr)
}
dataWriter, err = conn.Data()
if err != nil {
gkErr = gkerr.GenGkErr("conn.Data", err, ERROR_ID_SMTP_DATA)
return "", gkErr
}
defer dataWriter.Close()
buf := bytes.NewBufferString("From: " + from + "\nTo: " + toArray[0] + "\nSubject: " + subject + "\n")
_, err = buf.WriteTo(dataWriter)
if err != nil {
gkErr = gkerr.GenGkErr("buf.WriteTo", err, ERROR_ID_SMTP_WRITE)
return "", gkErr
}
buf = bytes.NewBufferString(string(message))
_, err = buf.WriteTo(dataWriter)
if err != nil {
gkErr = gkerr.GenGkErr("buf.WriteTo", err, ERROR_ID_SMTP_WRITE)
return "", gkErr
}
err = conn.Quit()
if err != nil {
localError := fmt.Sprintf("%v", err)
if strings.Index(localError, "Ok") != -1 &&
strings.Index(localError, "queued as") != -1 {
sendId = localError
} else {
gkErr = gkerr.GenGkErr("conn.Quit", err, ERROR_ID_SMTP_QUIT)
//gklog.LogTrace(fmt.Sprintf("smtp quit %T [%v] %v",err, err, gkErr))
return "", gkErr
}
}
return sendId, nil
}
示例7: send
func send(c *smtp.Client, m *mail.Message) error {
if err := c.Mail(config.Message_From); err != nil {
return fmt.Errorf("while setting From `%s`: %s", config.Message_From, err)
}
if config.ScanMessage {
for _, i := range []string{"To", "Cc", "Bcc"} {
if 0 == len(m.Header[i]) {
continue
}
if l, err := m.Header.AddressList(i); err != nil {
fmt.Fprintf(os.Stderr, "ScanMessage: Could not parse recipients in %s `%s`; %s", i, l, err)
} else {
for _, v := range l {
config.Message_To = append(config.Message_To, v.Address)
}
}
}
if 0 == len(config.Message_To) {
fmt.Fprintln(os.Stderr, "ScanMessage: No recipients found in message-body")
}
}
for _, to := range config.Message_To {
if err := c.Rcpt(to); err != nil {
return fmt.Errorf("while setting Recipient `%s`: %s", to, err)
}
}
w, err := c.Data()
if err != nil {
return fmt.Errorf("while setting Data: %s", err)
}
var s = ""
for k, h := range m.Header {
for _, v := range h {
s += k + ": " + v + "\r\n"
}
}
b := bytes.Buffer{}
b.ReadFrom(m.Body)
if _, err := w.Write([]byte(s + "\r\n" + b.String())); err != nil {
return fmt.Errorf("while sending message: %s", err)
}
if err = w.Close(); err != nil {
return fmt.Errorf("while closing message: %s", err)
}
if err = c.Quit(); err != nil {
return fmt.Errorf("while closing connection: %s", err)
}
return nil
}
示例8: rcpt
// rcpt parses the specified list of RFC 5322 addresses
// and calls smtp.Client.Rcpt() with each one.
func rcpt(c *smtp.Client, addresses []string) error {
for _, rcptAddr := range addresses {
parsedAddr, err := parseAddress(rcptAddr)
if err != nil {
return err
}
if err = c.Rcpt(parsedAddr); err != nil {
return err
}
}
return nil
}
示例9: tryMailServer
// Attempt to connect to the specified server. The connection attempt is
// performed in a separate goroutine, allowing it to be aborted if the host
// queue is shut down.
func (h *Host) tryMailServer(server, hostname string) (*smtp.Client, error) {
var (
c *smtp.Client
err error
done = make(chan bool)
)
go func() {
c, err = smtp.Dial(fmt.Sprintf("%s:25", server))
close(done)
}()
select {
case <-done:
case <-h.stop:
return nil, nil
}
if err != nil {
return nil, err
}
if err := c.Hello(hostname); err != nil {
return nil, err
}
if ok, _ := c.Extension("STARTTLS"); ok {
config := &tls.Config{ServerName: server}
if h.config.DisableSSLVerification {
config.InsecureSkipVerify = true
}
if err := c.StartTLS(config); err != nil {
return nil, err
}
}
return c, nil
}
示例10: deliverToMailServer
// Attempt to send the specified message to the specified client.
func (h *Host) deliverToMailServer(c *smtp.Client, m *Message) error {
r, err := h.storage.GetMessageBody(m)
if err != nil {
return err
}
defer r.Close()
r, err = dkimSigned(m.From, r, h.config)
if err != nil {
return err
}
if err := c.Mail(m.From); err != nil {
return err
}
for _, t := range m.To {
if err := c.Rcpt(t); err != nil {
return err
}
}
w, err := c.Data()
if err != nil {
return err
}
defer w.Close()
if _, err := io.Copy(w, r); err != nil {
return err
}
return nil
}
示例11: handleQUIT
func handleQUIT(rec *SMTPRecord, c *smtp.Client, proxy *SMTPSession) error {
id, err := c.Text.Cmd(rec.Cmd.Packet)
if err != nil {
return err
}
c.Text.StartResponse(id)
defer c.Text.EndResponse(id)
msg, err := collectClientLines(c.Text)
if err != nil {
return err
}
fmt.Fprint(proxy.base.Conn, msg)
c.Close()
proxy.Close()
return nil
}
示例12: Send
// Send send message through the client
func Send(c *smtp.Client, message *Message) (err error) {
data, err := message.RenderData()
if err != nil {
return
}
// if err = c.Reset(); err != nil {
// return
// }
if err = c.Mail(message.From); err != nil {
return
}
if err = addRcpt(c, message.To); err != nil {
return
}
if err = addRcpt(c, message.Cc); err != nil {
return
}
if err = addRcpt(c, message.Bcc); err != nil {
return
}
w, err := c.Data()
if err != nil {
return
}
defer w.Close()
_, err = w.Write(data)
return
}
示例13: processOneRecord
func (mailer *RecMailer) processOneRecord(id string, email string, w io.Writer, smtpClient *smtp.Client, httpClient *http.Client) int {
var (
recResponse RecResponse
)
fullUrl := fmt.Sprintf(mailer.Config.RecUrl, id)
resp, err := httpClient.Get(fullUrl)
if err != nil {
fmt.Fprintf(w, "Unable to get URL %s\n", fullUrl)
fmt.Println(err)
resp.Body.Close()
return 1
}
readBytes, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
fmt.Fprintf(w, "Unable to read from URL %s\n", fullUrl)
return 1
}
err = json.Unmarshal(readBytes, &recResponse)
if err != nil {
fmt.Fprintf(w, "Unable to parse JSON http resp for user %s\n", id)
fmt.Println(err)
return 1
}
if len(recResponse.Suggestions) == 0 {
fmt.Fprintf(w, "No recommendations for user %s\n", id)
return 1
}
// If there's no thumbnail, use a blank gif
for recIndex := 0; recIndex < len(recResponse.Suggestions); recIndex++ {
if len(recResponse.Suggestions[recIndex].Thumbnail.Url) == 0 {
recResponse.Suggestions[recIndex].Thumbnail.Url = "http://graphics8.nytimes.com/images/misc/spacer.gif"
}
}
//emails := make([]string, 1)
//emails[0] = email
localTime := time.Now()
dateStr := localTime.Format(time.RFC1123Z)
edata := new(EmailData)
edata.FromAddress = mailer.Config.EnvelopeFrom
edata.ToAddress = email
edata.Subject = "Recommendations for you"
edata.RecResponse = recResponse
edata.Date = dateStr
edata.HumanDate = fmt.Sprintf("%s %d, %d", localTime.Month(),
localTime.Day(), localTime.Year())
buff := new(bytes.Buffer)
mailer.Template.Execute(buff, edata)
//err = smtp.SendMail(mailer.Config.SmtpServer, nil, mailer.Config.SmtpFrom, emails, buff.Bytes())
errReset := smtpClient.Reset()
if errReset != nil {
fmt.Printf("There was an error sending for user %s\n", id)
fmt.Println(errReset)
return 1
}
errMail := smtpClient.Mail(mailer.Config.SmtpFrom)
if errMail != nil {
fmt.Printf("There was an error sending for user %s\n", id)
fmt.Println(errMail)
return 1
}
errRcpt := smtpClient.Rcpt(email)
if errRcpt != nil {
fmt.Printf("There was an error sending for user %s\n", id)
fmt.Println(errRcpt)
return 1
}
smtpWriter, errData := smtpClient.Data()
if errData != nil {
fmt.Printf("There was an error sending for user %s\n", id)
fmt.Println(errData)
return 1
}
smtpWriter.Write(buff.Bytes())
smtpWriter.Close()
/*
if err != nil {
fmt.Printf("There was an error sending for user %s\n", id)
fmt.Println(err)
return 1
}
*/
fmt.Fprintf(w, "Success for %s, %s\n", id, email)
return 0
}
示例14: send
// send does the low level sending of the email
func send(host string, port string, from string, to []string, msg string, auth smtp.Auth, encryption encryption, config *tls.Config, connectTimeout int) error {
var smtpConnectChannel chan smtpConnectErrorChannel
var c *smtp.Client = nil
var err error
// set the timeout value
timeout := time.Duration(connectTimeout) * time.Second
// if there is a timeout, setup the channel and do the connect under a goroutine
if timeout != 0 {
smtpConnectChannel = make(chan smtpConnectErrorChannel, 2)
go func() {
c, err = smtpConnect(host, port, from, to, msg, auth, encryption, config)
// send the result
smtpConnectChannel <- smtpConnectErrorChannel{
client: c,
err: err,
}
}()
}
if timeout == 0 {
// no timeout, just fire the connect
c, err = smtpConnect(host, port, from, to, msg, auth, encryption, config)
} else {
// get the connect result or timeout result, which ever happens first
select {
case result := <-smtpConnectChannel:
c = result.client
err = result.err
case <-time.After(timeout):
return errors.New("Mail Error: SMTP Connection timed out")
}
}
// check for connect error
if err != nil {
return err
}
defer c.Close()
// Set the sender
if err := c.Mail(from); err != nil {
return err
}
// Set the recipients
for _, address := range to {
if err := c.Rcpt(address); err != nil {
return err
}
}
// Send the data command
w, err := c.Data()
if err != nil {
return err
}
// write the message
_, err = fmt.Fprint(w, msg)
if err != nil {
return err
}
err = w.Close()
if err != nil {
return err
}
return c.Quit()
}
示例15: Deliver
func (es *EmailDeliverer) Deliver(alertCtx AlertContext, alertConf model.AlertConfig) error {
rcptRaw, ok := alertConf.Settings["recipient"]
if !ok {
return fmt.Errorf("missing email address")
}
evergreen.Logger.Logf(slogger.INFO, "Sending email to %v", rcptRaw)
var rcpt string
if rcpt, ok = rcptRaw.(string); !ok {
return fmt.Errorf("email address must be a string")
}
var err error
subject := getSubject(alertCtx)
body, err := es.getBody(alertCtx)
if err != nil {
return err
}
var c *smtp.Client
if es.UseSSL {
tlsCon, err := tls.Dial("tcp", fmt.Sprintf("%v:%v", es.Server, es.Port), &tls.Config{})
if err != nil {
return err
}
c, err = smtp.NewClient(tlsCon, es.Server)
} else {
c, err = smtp.Dial(fmt.Sprintf("%v:%v", es.Server, es.Port))
}
if err != nil {
return err
}
if es.Username != "" {
err = c.Auth(smtp.PlainAuth("", es.Username, es.Password, es.Server))
if err != nil {
return err
}
}
// Set the sender
from := mail.Address{"Evergreen Alerts", es.From}
err = c.Mail(es.From)
if err != nil {
evergreen.Logger.Errorf(slogger.ERROR, "Error establishing mail sender (%v): %v", es.From, err)
return err
}
err = c.Rcpt(rcpt)
if err != nil {
evergreen.Logger.Errorf(slogger.ERROR, "Error establishing mail recipient (%v): %v", rcpt, err)
return err
}
// Send the email body.
wc, err := c.Data()
if err != nil {
return err
}
defer wc.Close()
// set header information
header := make(map[string]string)
header["From"] = from.String()
header["To"] = rcpt
header["Subject"] = encodeRFC2047(subject)
header["MIME-Version"] = "1.0"
header["Content-Type"] = "text/html; charset=\"utf-8\""
header["Content-Transfer-Encoding"] = "base64"
message := ""
for k, v := range header {
message += fmt.Sprintf("%s: %s\r\n", k, v)
}
message += "\r\n" + base64.StdEncoding.EncodeToString([]byte(body))
// write the body
buf := bytes.NewBufferString(message)
if _, err = buf.WriteTo(wc); err != nil {
return err
}
return nil
}