// Send mail for recipient this campaign data func (r recipient) send(c *campaign, iface, host string) string { start := time.Now() data := new(MailData) data.Iface, data.Host = iface, host data.From_email = c.from_email data.From_name = c.from_name data.Attachments = c.attachments data.To_email = r.to_email data.To_name = r.to_name message := new(models.Message) message.CampaignId = c.id message.RecipientId = r.id message.CampaignSubject = c.subject message.CampaignTemplate = c.body message.RecipientEmail = r.to_email message.RecipientName = r.to_name var rs string m, e := message.RenderMessage() if e == nil { data.Subject = message.CampaignSubject data.Html = m var extraHeader bytes.Buffer extraHeader.WriteString("List-Unsubscribe: " + message.UnsubscribeMailLink() + "\nPrecedence: bulk\n") extraHeader.WriteString("Message-ID: <" + strconv.FormatInt(time.Now().Unix(), 10) + c.id + "." + r.id + "@" + data.Host + ">" + "\n") extraHeader.WriteString("X-Postmaster-Msgtype: campaign" + c.id + "\n") data.Extra_header = extraHeader.String() var res error if models.Config.RealSend { // Send mail res = data.Send() } else { wait := time.Duration(rand.Int()/10000000000) * time.Nanosecond time.Sleep(wait) res = errors.New("Test send") } if res == nil { rs = "Ok" } else { rs = res.Error() } } else { rs = e.Error() } camplog.Printf("Campaign %s for recipient id %s email %s is %s send time %s", c.id, r.id, data.To_email, rs, time.Since(start)) return rs }