2

我正在尝试使用我的 Mailjet 凭据从我的 golang 应用程序发送电子邮件,但我正在尝试以正常的 golang 方式来发送电子邮件(是的,我知道他们的库受到高度鼓励)。

我使用 Mailjet 库可以很好地处理电子邮件,但我的老板提出了一个非常好的观点,即我们可能不会永远留在 Mailjet。如果我们切换到不同的电子邮件解决方案,我们不想重写我们所有的电子邮件代码,我们只想更改我们的主机名和凭据。

我的打印机使用相同的主机名和凭据通过 Mailjet 发送电子邮件,但由于某种原因,我的 golang 应用程序不会!

我的代码是从golang smtp 库 SendEmail 示例中采用的。

这是(当然,没有我的凭据):

import (
    "bytes"
    "fmt"
    "net/smtp"
)
func SendTestEmail() (bool, error) {
    fmt.Println("Send Test Email: Enter")
    success := false
    hostname := "in-v3.mailjet.com"
    auth := smtp.PlainAuth("", username, password, hostname)
    to := []string{"me@example.com"}
    msg := []byte("To: me@example.com\r\n" +
        "Subject: discount Gophers!\r\n" +
        "\r\n" +
        "This is the email body.\r\n")
    fmt.Println("Send Test Email: Sending Email")
    err := smtp.SendMail(hostname+":587", auth, "sender@example.com", to, msg)
    if err == nil {
        fmt.Println("Send Test Email: Email successfully sent!")
        success = true
    } else {
        fmt.Println("Send Test Email: Email failed to send", err)
    }
    fmt.Println("Send Test Email: Exit")
    return success, err
}

请注意,我使用的是端口 587。我不知道我的打印机使用的是 587 还是 25,但它可以正常工作。使用端口 25 时我也不工作。

真正奇怪的是它smtp.SendEmail没有返回任何错误,但我仍然没有收到任何电子邮件(是的,我正在检查我的垃圾文件夹)!

此外,当我登录 Mailjet 时,我看不到任何电子邮件已发送。我确实看到当我从打印机发送内容时发送了一封电子邮件。

那么,我的邮箱呢?!

任何帮助是极大的赞赏。谢谢!

4

1 回答 1

6

首先,感谢您选择 Mailjet 作为您的电子邮件服务提供商!我在 Mailjet 领导 API 产品和开发人员关系。

在发送方面,您使用 SMTP 是对的。它是标准的、广泛支持的并且易于切换(即使我不希望我们能做到!)。在处理我们的 API 来管理业务流程时,我们的Go 库将变得很方便。

在查看您的代码时,我有几个问题/反馈:

  • 我猜使用的地址中的“sender@example.com”不是您在真实代码中使用的那个?无论如何,这封电子邮件必须事先在 Mailjet 端进行验证。请参阅我们的专用指南
  • 似乎您尝试在邮件中设置一些 SMTP 标头,例如主题,当它应该单独处理时

这是我用来处理 SMTP 的工作代码:

package main

import (
  "log"
  "net/smtp"
  "fmt"
)

func main() {
    auth := smtp.PlainAuth(
        "",
        "MAILJET_API_KEY",
        "MAILJET_API_SECRET",
        "in-v3.mailjet.com",
    )

    email := "foobar@test.com"

    header := make(map[string]string)
    header["From"] = email
    header["To"] = email
    header["Subject"] = "Hello Mailjet World!"
    header["X-Mailjet-Campaign"] = "test"

    message := ""
    for k, v := range header {
        message += fmt.Sprintf("%s: %s\r\n", k, v)
    }
    message += "\r\nHi! Thanks for using Mailjet."

    err := smtp.SendMail(
        "in-v3.mailjet.com:587",
        auth,
        email,
        []string{email},
        []byte(message),
    )
    if err != nil {
      log.Printf("Error: %s", err)
    } else {
      log.Printf("Mail sent!")
    }
}

希望能帮助到你!使用 Mailjet 发送 hAPI

于 2017-03-24T20:29:07.220 回答