From 8da7f21207cd6c0b048c96bd182b37dca83ff8e5 Mon Sep 17 00:00:00 2001 From: Vilen Topchii <32271530+vtopc@users.noreply.github.com> Date: Wed, 11 Dec 2024 20:44:43 +0200 Subject: [PATCH 1/4] expose MimeMessage --- messages.go | 25 ++++++++++++------------- messages_types_v5.go | 2 +- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/messages.go b/messages.go index 359533f..24e7893 100644 --- a/messages.go +++ b/messages.go @@ -80,10 +80,9 @@ type plainMessage struct { template string } -// mimeMessage contains fields relevant to pre-packaged MIME messages. -// TODO(v5): rename to MimeMessage +// MimeMessage contains fields relevant to pre-packaged MIME messages. // TODO(v5): embed CommonMessage -type mimeMessage struct { +type MimeMessage struct { body io.ReadCloser } @@ -199,7 +198,7 @@ func (*MailgunImpl) NewMessage(from, subject, text string, to ...string) *Messag // TODO(v5): should return MimeMessage func NewMIMEMessage(body io.ReadCloser, to ...string) *Message { return &Message{ - Specific: &mimeMessage{ + Specific: &MimeMessage{ body: body, }, to: to, @@ -397,7 +396,7 @@ func (m *plainMessage) RecipientCount() int { return len(m.bcc) + len(m.cc) } -func (*mimeMessage) RecipientCount() int { +func (*MimeMessage) RecipientCount() int { // TODO(v5): 10 + len(m.to) return 10 } @@ -411,13 +410,13 @@ func (m *plainMessage) AddCC(r string) { m.cc = append(m.cc, r) } -func (*mimeMessage) AddCC(_ string) {} +func (*MimeMessage) AddCC(_ string) {} func (m *plainMessage) AddBCC(r string) { m.bcc = append(m.bcc, r) } -func (*mimeMessage) AddBCC(_ string) {} +func (*MimeMessage) AddBCC(_ string) {} // Deprecated: use SetHTML instead. // @@ -430,7 +429,7 @@ func (m *plainMessage) SetHTML(h string) { m.html = h } -func (*mimeMessage) SetHTML(_ string) {} +func (*MimeMessage) SetHTML(_ string) {} // Deprecated: use SetAmpHTML instead. // TODO(v5): remove this method @@ -442,7 +441,7 @@ func (m *plainMessage) SetAmpHTML(h string) { m.ampHtml = h } -func (*mimeMessage) SetAmpHTML(_ string) {} +func (*MimeMessage) SetAmpHTML(_ string) {} // AddTag attaches tags to the message. Tags are useful for metrics gathering and event tracking purposes. // Refer to the Mailgun documentation for further details. @@ -459,7 +458,7 @@ func (m *plainMessage) SetTemplate(t string) { m.template = t } -func (*mimeMessage) SetTemplate(_ string) {} +func (*MimeMessage) SetTemplate(_ string) {} // Deprecated: is no longer supported and is deprecated for new software. // TODO(v5): remove this method. @@ -890,7 +889,7 @@ func (m *plainMessage) AddValues(p *FormDataPayload) { } } -func (m *mimeMessage) AddValues(p *FormDataPayload) { +func (m *MimeMessage) AddValues(p *FormDataPayload) { p.addReadCloser("message", "message.mime", m.body) } @@ -898,7 +897,7 @@ func (*plainMessage) Endpoint() string { return messagesEndpoint } -func (*mimeMessage) Endpoint() string { +func (*MimeMessage) Endpoint() string { return mimeMessagesEndpoint } @@ -965,7 +964,7 @@ func (m *plainMessage) IsValid() bool { return true } -func (m *mimeMessage) IsValid() bool { +func (m *MimeMessage) IsValid() bool { return m.body != nil } diff --git a/messages_types_v5.go b/messages_types_v5.go index eeefa99..c50d459 100644 --- a/messages_types_v5.go +++ b/messages_types_v5.go @@ -54,7 +54,7 @@ type plainMessageV5 struct { template string } -// mimeMessage contains fields relevant to pre-packaged MIME messages. +// MimeMessage contains fields relevant to pre-packaged MIME messages. // TODO(v5): rename to MimeMessage type mimeMessageV5 struct { commonMessageV5 From 56e10c7cb94cb22e7a98ec19b1dde7d890545236 Mon Sep 17 00:00:00 2001 From: Vilen Topchii <32271530+vtopc@users.noreply.github.com> Date: Wed, 11 Dec 2024 20:45:25 +0200 Subject: [PATCH 2/4] expose PlainMessage --- messages.go | 25 ++++++++++++------------- messages_types_v5.go | 2 +- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/messages.go b/messages.go index 24e7893..1cfda1a 100644 --- a/messages.go +++ b/messages.go @@ -63,13 +63,12 @@ type BufferAttachment struct { Buffer []byte } -// plainMessage contains fields relevant to plain API-synthesized messages. +// PlainMessage contains fields relevant to plain API-synthesized messages. // You're expected to use various setters to set most of these attributes, // although from, subject, and text are set when the message is created with // NewMessage. -// TODO(v5): rename to PlainMessage // TODO(v5): embed CommonMessage -type plainMessage struct { +type PlainMessage struct { from string cc []string bcc []string @@ -164,7 +163,7 @@ type Specific interface { // TODO(v5): should return PlainMessage func NewMessage(from, subject, text string, to ...string) *Message { return &Message{ - Specific: &plainMessage{ + Specific: &PlainMessage{ from: from, subject: subject, text: text, @@ -392,7 +391,7 @@ func (m *Message) RecipientCount() int { return len(m.to) + m.Specific.RecipientCount() } -func (m *plainMessage) RecipientCount() int { +func (m *PlainMessage) RecipientCount() int { return len(m.bcc) + len(m.cc) } @@ -406,13 +405,13 @@ func (m *Message) SetReplyTo(recipient string) { m.AddHeader("Reply-To", recipient) } -func (m *plainMessage) AddCC(r string) { +func (m *PlainMessage) AddCC(r string) { m.cc = append(m.cc, r) } func (*MimeMessage) AddCC(_ string) {} -func (m *plainMessage) AddBCC(r string) { +func (m *PlainMessage) AddBCC(r string) { m.bcc = append(m.bcc, r) } @@ -425,7 +424,7 @@ func (m *Message) SetHtml(html string) { m.SetHTML(html) } -func (m *plainMessage) SetHTML(h string) { +func (m *PlainMessage) SetHTML(h string) { m.html = h } @@ -437,7 +436,7 @@ func (m *Message) SetAMPHtml(html string) { m.SetAmpHTML(html) } -func (m *plainMessage) SetAmpHTML(h string) { +func (m *PlainMessage) SetAmpHTML(h string) { m.ampHtml = h } @@ -454,7 +453,7 @@ func (m *Message) AddTag(tag ...string) error { return nil } -func (m *plainMessage) SetTemplate(t string) { +func (m *PlainMessage) SetTemplate(t string) { m.template = t } @@ -868,7 +867,7 @@ func addMessageAttachment(dst *FormDataPayload, src SendableMessage) { } } -func (m *plainMessage) AddValues(p *FormDataPayload) { +func (m *PlainMessage) AddValues(p *FormDataPayload) { p.addValue("from", m.from) p.addValue("subject", m.subject) p.addValue("text", m.text) @@ -893,7 +892,7 @@ func (m *MimeMessage) AddValues(p *FormDataPayload) { p.addReadCloser("message", "message.mime", m.body) } -func (*plainMessage) Endpoint() string { +func (*PlainMessage) Endpoint() string { return messagesEndpoint } @@ -939,7 +938,7 @@ func isValid(m SendableMessage) bool { return true } -func (m *plainMessage) IsValid() bool { +func (m *PlainMessage) IsValid() bool { if !validateStringList(m.cc, false) { return false } diff --git a/messages_types_v5.go b/messages_types_v5.go index c50d459..0cc843f 100644 --- a/messages_types_v5.go +++ b/messages_types_v5.go @@ -36,7 +36,7 @@ type commonMessageV5 struct { skipVerification bool } -// plainMessage contains fields relevant to plain API-synthesized messages. +// PlainMessage contains fields relevant to plain API-synthesized messages. // You're expected to use various setters to set most of these attributes, // although from, subject, and text are set when the message is created with // NewMessage. From d2204c28c9deadfde8e6cf9a7bbf3c5c0735ed6f Mon Sep 17 00:00:00 2001 From: Vilen Topchii <32271530+vtopc@users.noreply.github.com> Date: Wed, 11 Dec 2024 20:49:43 +0200 Subject: [PATCH 3/4] add getters to PlainMessage --- messages.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/messages.go b/messages.go index 1cfda1a..4599da3 100644 --- a/messages.go +++ b/messages.go @@ -79,6 +79,38 @@ type PlainMessage struct { template string } +func (m *PlainMessage) From() string { + return m.from +} + +func (m *PlainMessage) CC() []string { + return m.cc +} + +func (m *PlainMessage) BCC() []string { + return m.bcc +} + +func (m *PlainMessage) Subject() string { + return m.subject +} + +func (m *PlainMessage) Text() string { + return m.text +} + +func (m *PlainMessage) HTML() string { + return m.html +} + +func (m *PlainMessage) AmpHTML() string { + return m.ampHtml +} + +func (m *PlainMessage) Template() string { + return m.template +} + // MimeMessage contains fields relevant to pre-packaged MIME messages. // TODO(v5): embed CommonMessage type MimeMessage struct { From d5654219899930e8ffe43979876114949f090775 Mon Sep 17 00:00:00 2001 From: Vilen Topchii <32271530+vtopc@users.noreply.github.com> Date: Wed, 11 Dec 2024 20:54:40 +0200 Subject: [PATCH 4/4] switched to PlainMessage getters --- messages.go | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/messages.go b/messages.go index 4599da3..52f7fc6 100644 --- a/messages.go +++ b/messages.go @@ -420,15 +420,15 @@ func (m *Message) AddRecipientAndVariables(r string, vars map[string]any) error // you may find that some recipients will not receive your e-mail. // It's perfectly OK, of course, for a MIME message to not have any Cc: or Bcc: recipients. func (m *Message) RecipientCount() int { - return len(m.to) + m.Specific.RecipientCount() + return len(m.To()) + m.Specific.RecipientCount() } func (m *PlainMessage) RecipientCount() int { - return len(m.bcc) + len(m.cc) + return len(m.BCC()) + len(m.CC()) } func (*MimeMessage) RecipientCount() int { - // TODO(v5): 10 + len(m.to) + // TODO(v5): 10 + len(m.To()) return 10 } @@ -438,13 +438,13 @@ func (m *Message) SetReplyTo(recipient string) { } func (m *PlainMessage) AddCC(r string) { - m.cc = append(m.cc, r) + m.cc = append(m.CC(), r) } func (*MimeMessage) AddCC(_ string) {} func (m *PlainMessage) AddBCC(r string) { - m.bcc = append(m.bcc, r) + m.bcc = append(m.BCC(), r) } func (*MimeMessage) AddBCC(_ string) {} @@ -477,11 +477,11 @@ func (*MimeMessage) SetAmpHTML(_ string) {} // AddTag attaches tags to the message. Tags are useful for metrics gathering and event tracking purposes. // Refer to the Mailgun documentation for further details. func (m *Message) AddTag(tag ...string) error { - if len(m.tags) >= MaxNumberOfTags { + if len(m.Tags()) >= MaxNumberOfTags { return fmt.Errorf("cannot add any new tags. Message tag limit (%d) reached", MaxNumberOfTags) } - m.tags = append(m.tags, tag...) + m.tags = append(m.Tags(), tag...) return nil } @@ -494,7 +494,7 @@ func (*MimeMessage) SetTemplate(_ string) {} // Deprecated: is no longer supported and is deprecated for new software. // TODO(v5): remove this method. func (m *Message) AddCampaign(campaign string) { - m.campaigns = append(m.campaigns, campaign) + m.campaigns = append(m.Campaigns(), campaign) } // SetDKIM arranges to send the o:dkim header with the message, and sets its value accordingly. @@ -900,23 +900,23 @@ func addMessageAttachment(dst *FormDataPayload, src SendableMessage) { } func (m *PlainMessage) AddValues(p *FormDataPayload) { - p.addValue("from", m.from) - p.addValue("subject", m.subject) - p.addValue("text", m.text) - for _, cc := range m.cc { + p.addValue("from", m.From()) + p.addValue("subject", m.Subject()) + p.addValue("text", m.Text()) + for _, cc := range m.CC() { p.addValue("cc", cc) } - for _, bcc := range m.bcc { + for _, bcc := range m.BCC() { p.addValue("bcc", bcc) } - if m.html != "" { - p.addValue("html", m.html) + if m.HTML() != "" { + p.addValue("html", m.HTML()) } - if m.template != "" { - p.addValue("template", m.template) + if m.Template() != "" { + p.addValue("template", m.Template()) } - if m.ampHtml != "" { - p.addValue("amp-html", m.ampHtml) + if m.AmpHTML() != "" { + p.addValue("amp-html", m.AmpHTML()) } } @@ -971,24 +971,24 @@ func isValid(m SendableMessage) bool { } func (m *PlainMessage) IsValid() bool { - if !validateStringList(m.cc, false) { + if !validateStringList(m.CC(), false) { return false } - if !validateStringList(m.bcc, false) { + if !validateStringList(m.BCC(), false) { return false } - if m.from == "" { + if m.From() == "" { return false } - if m.template != "" { + if m.Template() != "" { // m.text or m.html not needed if template is supplied return true } - if m.text == "" && m.html == "" { + if m.Text() == "" && m.HTML() == "" { return false }