email_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package parsemail
  2. import (
  3. "bytes"
  4. "fmt"
  5. "github.com/emersion/go-message"
  6. log "github.com/sirupsen/logrus"
  7. "io"
  8. "os"
  9. "pmail/config"
  10. "pmail/db"
  11. "pmail/session"
  12. "testing"
  13. "time"
  14. )
  15. func testInit() {
  16. // 设置日志格式为json格式
  17. //log.SetFormatter(&log.JSONFormatter{})
  18. log.SetReportCaller(true)
  19. log.SetFormatter(&log.TextFormatter{
  20. //以下设置只是为了使输出更美观
  21. DisableColors: true,
  22. TimestampFormat: "2006-01-02 15:03:04",
  23. })
  24. // 设置将日志输出到标准输出(默认的输出为stderr,标准错误)
  25. // 日志消息输出可以是任意的io.writer类型
  26. log.SetOutput(os.Stdout)
  27. // 设置日志级别为warn以上
  28. log.SetLevel(log.TraceLevel)
  29. var cst, _ = time.LoadLocation("Asia/Shanghai")
  30. time.Local = cst
  31. config.Init()
  32. config.Instance.DkimPrivateKeyPath = "../../config/dkim/dkim.priv"
  33. config.Instance.DbType = config.DBTypeSQLite
  34. config.Instance.DbDSN = "../../config/pmail_temp.db"
  35. Init()
  36. db.Init()
  37. session.Init()
  38. }
  39. func TestEmail_domainMatch(t *testing.T) {
  40. //e := &Email{}
  41. //dnsNames := []string{
  42. // "*.mail.qq.com",
  43. // "993.dav.qq.com",
  44. // "993.eas.qq.com",
  45. // "993.imap.qq.com",
  46. // "993.pop.qq.com",
  47. // "993.smtp.qq.com",
  48. // "imap.qq.com",
  49. // "mx1.qq.com",
  50. // "mx2.qq.com",
  51. // "mx3.qq.com",
  52. // "pop.qq.com",
  53. // "smtp.qq.com",
  54. // "mail.qq.com",
  55. //}
  56. //
  57. //fmt.Println(e.domainMatch("", dnsNames))
  58. //fmt.Println(e.domainMatch("xjiangwei.cn", dnsNames))
  59. //fmt.Println(e.domainMatch("qq.com", dnsNames))
  60. //fmt.Println(e.domainMatch("test.aaa.mail.qq.com", dnsNames))
  61. //fmt.Println(e.domainMatch("smtp.qq.com", dnsNames))
  62. //fmt.Println(e.domainMatch("pop.qq.com", dnsNames))
  63. //fmt.Println(e.domainMatch("test.mail.qq.com", dnsNames))
  64. }
  65. func Test_buildUser(t *testing.T) {
  66. u := buildUser("Jinnrry N <jiangwei1995910@gmail.com>")
  67. if u.EmailAddress != "jiangwei1995910@gmail.com" {
  68. t.Error("error")
  69. }
  70. if u.Name != "Jinnrry N" {
  71. t.Error("error")
  72. }
  73. u = buildUser("=?UTF-8?B?YWRtaW5AamlubnJyeS5jb20=?=<admin@jinnrry.com>")
  74. if u.EmailAddress != "admin@jinnrry.com" {
  75. t.Error("error")
  76. }
  77. if u.Name != "admin@jinnrry.com" {
  78. t.Error("error")
  79. }
  80. u = buildUser("\"admin@jinnrry.com\" <admin@jinnrry.com>")
  81. if u.EmailAddress != "admin@jinnrry.com" {
  82. t.Error("error")
  83. }
  84. if u.Name != "admin@jinnrry.com" {
  85. t.Error("error")
  86. }
  87. }
  88. func TestEmailBuidlers(t *testing.T) {
  89. var b bytes.Buffer
  90. var h message.Header
  91. h.SetContentType("multipart/alternative", nil)
  92. w, err := message.CreateWriter(&b, h)
  93. if err != nil {
  94. }
  95. var h1 message.Header
  96. h1.SetContentType("text/html", nil)
  97. w1, err := w.CreatePart(h1)
  98. if err != nil {
  99. }
  100. io.WriteString(w1, "<h1>Hello World!</h1><p>This is an HTML part.</p>")
  101. w1.Close()
  102. var h2 message.Header
  103. h2.SetContentType("text/plain", nil)
  104. w2, err := w.CreatePart(h2)
  105. if err != nil {
  106. }
  107. io.WriteString(w2, "Hello World!\n\nThis is a text part.")
  108. w2.Close()
  109. w.Close()
  110. fmt.Println(b.String())
  111. }
  112. func TestEmail_builder(t *testing.T) {
  113. testInit()
  114. e := Email{
  115. From: buildUser("i@test.com"),
  116. To: buildUsers([]string{"to@test.com"}),
  117. Subject: "Title",
  118. HTML: []byte("Html"),
  119. Text: []byte("Text"),
  120. Attachments: []*Attachment{
  121. {
  122. Filename: "a.png",
  123. ContentType: "image/jpeg",
  124. Content: []byte("aaa"),
  125. ContentID: "1",
  126. },
  127. },
  128. }
  129. rest := e.BuildBytes(nil, false)
  130. fmt.Println(string(rest))
  131. }