Add subtitle
This commit is contained in:
parent
13389fa2db
commit
e74d278f55
|
@ -13,7 +13,8 @@ Sends out newsletters
|
|||
2. Create an email file
|
||||
* Name it whatever you want.
|
||||
* The first line of the file will be used as {{ subject }} in the postmark template.
|
||||
* The rest of the file will be used as {{{ content_body }}}.
|
||||
* The second line of the file, if not empty, will be used as {{ subtitle }} in the postmark template.
|
||||
* After a blank line, the rest of the file will be used as {{{ content_body }}}.
|
||||
* Newlines between the subject and body will be removed.
|
||||
|
||||
3. Do a test run
|
||||
|
|
32
main.go
32
main.go
|
@ -75,14 +75,19 @@ func verifyConfig() (Config, bool) {
|
|||
return config, valid
|
||||
}
|
||||
|
||||
func parseMailFile(contents string) (subject string, body string, valid bool) {
|
||||
func parseMailFile(contents string) (subject string, subtitle string, body string, valid bool) {
|
||||
valid = false
|
||||
parts := strings.SplitN(string(contents), "\n", 2)
|
||||
parts := strings.SplitN(string(contents), "\n\n", 2)
|
||||
if len(parts) < 2 {
|
||||
fmt.Printf("File does not contain subject and body\n")
|
||||
return
|
||||
}
|
||||
subject = strings.TrimSpace(parts[0])
|
||||
subjectAndSubtitle := strings.TrimSpace(parts[0])
|
||||
subjectParts := strings.SplitN(subjectAndSubtitle, "\n", 2)
|
||||
subject = subjectParts[0]
|
||||
if len(subjectParts) > 1 {
|
||||
subtitle = subjectParts[1]
|
||||
}
|
||||
rawBody := strings.Trim(parts[1], "\n")
|
||||
if subject == "" {
|
||||
fmt.Printf("Subject is empty\n")
|
||||
|
@ -108,7 +113,7 @@ func sendTest(newsletterFile string) {
|
|||
}
|
||||
return
|
||||
}
|
||||
subject, body, valid := parseMailFile(string(contents))
|
||||
subject, subtitle, body, valid := parseMailFile(string(contents))
|
||||
if !valid {
|
||||
return
|
||||
}
|
||||
|
@ -117,7 +122,7 @@ func sendTest(newsletterFile string) {
|
|||
logFile := newsletterFile + "." + time.Now().Format("20060102T150405") + ".test.log"
|
||||
os.Truncate(trackingFile, 0)
|
||||
|
||||
blastMail(cfg, logFile, trackingFile, audience, subject, body)
|
||||
blastMail(cfg, logFile, trackingFile, audience, subject, subtitle, body)
|
||||
|
||||
sha1File := newsletterFile + ".sha1"
|
||||
sum := sha1.Sum(contents)
|
||||
|
@ -139,7 +144,7 @@ func sendNews(audienceFile string, newsletterFile string) {
|
|||
}
|
||||
return
|
||||
}
|
||||
subject, body, valid := parseMailFile(string(contents))
|
||||
subject, subtitle, body, valid := parseMailFile(string(contents))
|
||||
if !valid {
|
||||
return
|
||||
}
|
||||
|
@ -180,10 +185,10 @@ func sendNews(audienceFile string, newsletterFile string) {
|
|||
trackingFile := newsletterFile + ".track"
|
||||
logFile := newsletterFile + "." + time.Now().Format("20060102T150405") + ".log"
|
||||
|
||||
blastMail(cfg, logFile, trackingFile, audience, subject, body)
|
||||
blastMail(cfg, logFile, trackingFile, audience, subject, subtitle, body)
|
||||
}
|
||||
|
||||
func blastMail(cfg Config, logFile string, trackingFile string, audience []string, subject string, body string) {
|
||||
func blastMail(cfg Config, logFile string, trackingFile string, audience []string, subject, subtitle, body string) {
|
||||
log, err := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
|
||||
if err != nil {
|
||||
fmt.Printf("Can't open log file %s: %v\n", logFile, err)
|
||||
|
@ -218,7 +223,7 @@ func blastMail(cfg Config, logFile string, trackingFile string, audience []strin
|
|||
if !found {
|
||||
group = append(group, a)
|
||||
if len(group) == cfg.BatchSize {
|
||||
results, err := sendMail(cfg, group, subject, body)
|
||||
results, err := sendMail(cfg, group, subject, subtitle, body)
|
||||
if err != nil {
|
||||
fmt.Printf("Error while sending mail: %v\n", err)
|
||||
return
|
||||
|
@ -233,7 +238,7 @@ func blastMail(cfg Config, logFile string, trackingFile string, audience []strin
|
|||
}
|
||||
}
|
||||
if len(group) > 0 {
|
||||
results, err := sendMail(cfg, group, subject, body)
|
||||
results, err := sendMail(cfg, group, subject, subtitle, body)
|
||||
if err != nil {
|
||||
fmt.Printf("Error while sending mail: %v\n", err)
|
||||
return
|
||||
|
@ -250,6 +255,7 @@ var postmarkClient = http.Client{}
|
|||
|
||||
type PostmarkTemplateModel struct {
|
||||
Subject string `json:"subject"`
|
||||
Subtitle string `json:"subtitle,omitempty"`
|
||||
Body string `json:"content_body"`
|
||||
}
|
||||
|
||||
|
@ -272,7 +278,7 @@ type PostmarkBatchResult struct {
|
|||
Message string `json:"Message"`
|
||||
}
|
||||
|
||||
func sendMail(cfg Config, recipients []string, subject, contentHtml string) ([]PostmarkBatchResult, error) {
|
||||
func sendMail(cfg Config, recipients []string, subject, subtitle, contentHtml string) ([]PostmarkBatchResult, error) {
|
||||
fmt.Printf("Sending batch [%d recipients]...", len(recipients))
|
||||
from := cfg.FromAddress
|
||||
if cfg.FromName != "" {
|
||||
|
@ -286,6 +292,7 @@ func sendMail(cfg Config, recipients []string, subject, contentHtml string) ([]P
|
|||
TemplateAlias: cfg.PostmarkTemplateAlias,
|
||||
TemplateModel: PostmarkTemplateModel{
|
||||
Subject: subject,
|
||||
Subtitle: subtitle,
|
||||
Body: contentHtml,
|
||||
},
|
||||
TrackOpens: false,
|
||||
|
@ -342,7 +349,8 @@ func main() {
|
|||
2. Create an email file
|
||||
* Name it whatever you want.
|
||||
* The first line of the file will be used as {{ subject }} in the postmark template.
|
||||
* The rest of the file will be used as {{{ content_body }}}.
|
||||
* The second line of the file, if not empty, will be used as {{ subtitle }} in the postmark template.
|
||||
* After a blank line, the rest of the file will be used as {{{ content_body }}}.
|
||||
* Newlines between the subject and body will be removed.
|
||||
|
||||
3. Do a test run
|
||||
|
|
Loading…
Reference in New Issue