【问题标题】:Mailgun::CommunicationError via nginx '301 Moved Permanently' errorMailgun::CommunicationError via nginx '301 Moved Permanently' 错误
【发布时间】:2017-06-13 09:18:54
【问题描述】:

我有一个通过 Mailgun 发送电子邮件的 Ruby Web 应用程序。

我的 Mailgun 帐户和 gem 已正确设置,我可以手动发送电子邮件(例如通过 curl)。

API 密钥和 API 基本 URL(https 沙箱域)存储在环境变量中。

当我尝试从应用程序发送电子邮件时:

  def initialize(mailer: nil)
    @mailer = mailer || Mailgun::Client.new(ENV['MAILGUN_API_KEY'])
  end

然后:

  def call(user)
    mailer.send_message(ENV['MAILGUN_SANDBOX'], {from: '...',
        to: user.email,
        subject: '...',
        text: "..."})
  end

当我通过 localhost:xxxx 使用 Sinatra 运行应用程序时,我在 /.../... 301 Moved Permanently: ... nginx 处收到 Mailgun::CommunicationError 指向此行:

mailer.send_message(ENV['MAILGUN_SANDBOX'], ...

知道为什么会这样吗?我已经研究了这个问题几个小时,但找不到下一步该做什么的线索。

谢谢!

【问题讨论】:

    标签: ruby nginx sinatra http-status-code-301 mailgun


    【解决方案1】:

    我遇到了同样的问题。如果您已经解决了这个问题,那么希望这可以帮助其他人。

    我切换到消息生成器以便于使用并能够render我的html,但我很确定它仍然会以您使用:text设置的格式发送

    当我在.env 文件中切换到正确的domain 时,我相信它解决了我的问题。您需要 2 个不同的域才能使用 Mailgun。第一个是沙盒的完整域。 ENV['MAILGUN_DOMAIN'] 是沙盒域,带有完整的https://api.mailgun.net/v3/sandboxXXXXxxxXXXXXX.mailgun.org 以发送大多数邮件格式。

    您还需要完整域的后半部分来发送消息。这只是传递给MessageBuilder 或其他消息.send_message 方法的sandboxXXXXxxxXXXXXX.mailgun.org。当我将它们混淆或两者相同时,我不断收到此错误。当我切换到将development.rbsome_mailer.rb 中的两者分开时,我可以毫无问题地发送邮件。

    以下是我的文件设置,供参考。我对这一切都很陌生,但这就是我的设置方式,它对我有用,所以希望它有所帮助。

    # .env 
    MAILGUN_DOMAIN='https://api.mailgun.net/v3/sandboxXXXXxxxXXXXXX.mailgun.org'
    MAILGUN_SEND_DOMAIN='sandboxXXXXxxxXXXXXX.mailgun.org'
    
    # development.rb
    ActionMailer::Base.smtp_settings = {
      :authentication => :plain,
      :address => "smtp.mailgun.org",
      :port => 587,
      :domain => "ENV['MAILGUN_DOMAIN']",
      :user_name => "ENV['MAILGUN_USERNAME']",
      :password => "ENV['MAILGUN_PASSWORD']"
    }
    
    
    # some_mailer.rb
    def some_mail_notification(user)
      @user = user
    
      mg_client = Mailgun::Client.new ENV['MAILGUN_KEY']
      mb_obj = Mailgun::MessageBuilder.new
      mb_obj.from "email@testing.com", {'first' => 'Customer', 'last' => 'Support'}
      mb_obj.add_recipient :to, @user.email, { 'first' => @user.first_name, 'last' => @user.last_name }
      mb_obj.subject "Your Recent Purchase on Some Site"
      mb_obj.body_html ("#{render 'some_mail_notification.html.erb'}")
      mg_client.send_message("sandboxXXXXxxxXXXXXX.mailgun.org", mb_obj)
    end
    

    我将上面的send_message 留给了沙盒域,但您可以在.env 文件中将其设置为环境变量。

    【讨论】:

      猜你喜欢
      • 2017-02-28
      • 2014-07-05
      • 2012-01-09
      • 2017-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 2020-10-07
      相关资源
      最近更新 更多