utils.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package email
  2. import "strings"
  3. // mail related images hosted on github
  4. var (
  5. netmakerLogoTeal = "https://raw.githubusercontent.com/gravitl/netmaker/netmaker_logos/img/logos/netmaker-logo-2.png"
  6. )
  7. type EmailBodyBuilder interface {
  8. WithHeadline(text string) EmailBodyBuilder
  9. WithParagraph(text string) EmailBodyBuilder
  10. WithHtml(text string) EmailBodyBuilder
  11. WithSignature() EmailBodyBuilder
  12. Build() string
  13. }
  14. type EmailBodyBuilderWithH1HeadlineAndImage struct {
  15. headline string
  16. bodyContent []string
  17. hasSignature bool
  18. }
  19. func (b *EmailBodyBuilderWithH1HeadlineAndImage) WithHeadline(text string) EmailBodyBuilder {
  20. b.headline = text
  21. return b
  22. }
  23. func (b *EmailBodyBuilderWithH1HeadlineAndImage) WithParagraph(text string) EmailBodyBuilder {
  24. b.bodyContent = append(b.bodyContent, styledParagraph(text))
  25. return b
  26. }
  27. func (b *EmailBodyBuilderWithH1HeadlineAndImage) WithHtml(text string) EmailBodyBuilder {
  28. b.bodyContent = append(b.bodyContent, text)
  29. return b
  30. }
  31. func (b *EmailBodyBuilderWithH1HeadlineAndImage) WithSignature() EmailBodyBuilder {
  32. b.hasSignature = true
  33. return b
  34. }
  35. func (b *EmailBodyBuilderWithH1HeadlineAndImage) Build() string {
  36. bodyContent := strings.Join(b.bodyContent, "")
  37. // TODO: Edit design to add signature.
  38. //signature := ""
  39. //if b.hasSignature {
  40. // signature = styledSignature()
  41. //}
  42. return `
  43. <!doctype html>
  44. <html lang="en">
  45. <head>
  46. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  47. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  48. <title>Simple Transactional Email</title>
  49. <style media="all" type="text/css">
  50. @media all {
  51. .btn-primary table td:hover {
  52. background-color: #ec0867 !important;
  53. }
  54. .btn-primary a:hover {
  55. background-color: #ec0867 !important;
  56. border-color: #ec0867 !important;
  57. }
  58. }
  59. @media only screen and (max-width: 640px) {
  60. .main p,
  61. .main td,
  62. .main span {
  63. font-size: 16px !important;
  64. }
  65. .wrapper {
  66. padding: 8px !important;
  67. }
  68. .content {
  69. padding: 0 !important;
  70. }
  71. .container {
  72. padding: 0 !important;
  73. padding-top: 8px !important;
  74. width: 100% !important;
  75. }
  76. .main {
  77. border-left-width: 0 !important;
  78. border-radius: 0 !important;
  79. border-right-width: 0 !important;
  80. }
  81. .btn table {
  82. max-width: 100% !important;
  83. width: 100% !important;
  84. }
  85. .btn a {
  86. font-size: 16px !important;
  87. max-width: 100% !important;
  88. width: 100% !important;
  89. }
  90. }
  91. @media all {
  92. .ExternalClass {
  93. width: 100%;
  94. }
  95. .ExternalClass,
  96. .ExternalClass p,
  97. .ExternalClass span,
  98. .ExternalClass font,
  99. .ExternalClass td,
  100. .ExternalClass div {
  101. line-height: 100%;
  102. }
  103. .apple-link a {
  104. color: inherit !important;
  105. font-family: inherit !important;
  106. font-size: inherit !important;
  107. font-weight: inherit !important;
  108. line-height: inherit !important;
  109. text-decoration: none !important;
  110. }
  111. #MessageViewBody a {
  112. color: inherit;
  113. text-decoration: none;
  114. font-size: inherit;
  115. font-family: inherit;
  116. font-weight: inherit;
  117. line-height: inherit;
  118. }
  119. }
  120. </style>
  121. </head>
  122. <body style="font-family: Helvetica, sans-serif; -webkit-font-smoothing: antialiased; font-size: 16px; line-height: 1.3; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background-color: #f4f5f6; margin: 0; padding: 0;">
  123. <table role="presentation" border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f4f5f6; width: 100%;" width="100%" bgcolor="#f4f5f6">
  124. <tr>
  125. <td style="font-family: Helvetica, sans-serif; font-size: 16px; vertical-align: top;" valign="top">&nbsp;</td>
  126. <td class="container" style="font-family: Helvetica, sans-serif; font-size: 16px; vertical-align: top; max-width: 600px; padding: 24px 0px 24px 0px; width: 600px; margin: 0 auto;" width="600" valign="top">
  127. <div class="content" style="box-sizing: border-box; display: block; margin: 0 auto; max-width: 600px; padding: 0;">
  128. <!-- START CENTERED WHITE CONTAINER -->
  129. <table role="presentation" border="0" cellpadding="0" cellspacing="0" class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background: #ffffff; border: 1px solid #eaebed; border-radius: 16px; width: 100%;" width="100%">
  130. <!-- START MAIN CONTENT AREA -->
  131. <tr>
  132. <td class="wrapper" style="font-family: Helvetica, sans-serif; font-size: 16px; vertical-align: top; box-sizing: border-box; padding: 24px;" valign="top">
  133. <img src="` + netmakerLogoTeal + `" alt="Netmaker Logo" width="200" height="100" border="0" style="border:0; outline:none; text-decoration:none; display:block; margin-left: auto;">
  134. ` + bodyContent + `
  135. </td>
  136. </tr>
  137. <!-- END MAIN CONTENT AREA -->
  138. </table>
  139. <!-- END CENTERED WHITE CONTAINER --></div>
  140. </td>
  141. <td style="font-family: Helvetica, sans-serif; font-size: 16px; vertical-align: top;" valign="top">&nbsp;</td>
  142. </tr>
  143. </table>
  144. </body>
  145. </html>`
  146. }
  147. func styledParagraph(text string) string {
  148. return `<p style="font-family: Helvetica, sans-serif; font-size: 16px; font-weight: normal; margin: 0; margin-bottom: 16px;">` + text + `</p>`
  149. }