2

現在、sendgrid を介してメールを送信する作業を行っており、現在、新しいユーザーにメールを送信しています。...しかし奇妙なことに、非常によく似た電子メール オプションが機能しません。受信者を含む完全な電子メールがログに表示されますが、受信されません。

ここに私が持っているものがあります:

初期化子の mail.rb ファイル:

ActionMailer::Base.smtp_settings = {
  :address        => 'smtp.sendgrid.net',
  :port           => '587',
  :authentication => :plain,
  :user_name      => configatron.sendgrid.username,
  :password       => configatron.sendgrid.password,
  :domain         => 'heroku.com'
}

ActionMailer::Base.delivery_method = :smtp

ユーザー名とパスワードが別の場所で定義されている場合 - それらは正しい値であることが確認されています

新しいユーザーが登録したら、UserMailer クラスを呼び出して次のことを行います。

def welcome_email(user)
    @email = user.email
    @name = user.full_name

    mail(to: @email, subject: "Welcome!")
end

そして、ワーカーは次のようにするだけでそれを呼び出します。

UserMailer.welcome_email(user).deliver

これでうまくいきます。私はメールを受け取り、それだけです。

しかし、別の方法でメールを送信しようとすると、魔法のようにうまくいきません。

同じ UserMailer クラスで:

def request(org, recipient, item)
  @org = org
  @recipient = recipient
  @item = item

  mail(to: @org.email, subject: "A new request has been posted!")
end

SAME 関数を使用する (ただし、今回はワーカーの外にあるため、簡単にデバッグできます):

UserMailer.request(org, recipient, item).deliver

電子メールは端末に完全に表示されます。

Sent mail to mypersonalemail@test.com (4717ms)
Date: Mon, 31 Dec 2012 01:03:35 -0800
From: mysendingemail@test.com
To: mypersonalemail@test.com
Message-ID: <[longhexstring]@localhost.localdomain.mail>
Subject: A new request has been posted!
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="--==_mimepart_50e154e769903_3c41bba7ec576d5";
charset=UTF-8
Content-Transfer-Encoding: 7bit



----==_mimepart_50e154e769903_3c41bba7ec576d5
Date: Mon, 31 Dec 2012 01:03:35 -0800
Mime-Version: 1.0
Content-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-ID: <[longhex]@localhost.localdomain.mail>

Hello world!

----==_mimepart_50e154e769903_3c41bba7ec576d5
Date: Mon, 31 Dec 2012 01:03:35 -0800
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-ID: <[longhex]@localhost.localdomain.
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
</head>
  <body>
    <p>
Hello world!
    </p>
  </body>
</html>

しかし、私は自分の個人的な電子メール、ジャンク、ゴミ箱の受信トレイを確認しましたが、何も受信しませんでした. sendgrid でさえ、リクエスト メールの送信をリクエストしたログはありません。しかし、ウェルカム メールは問題なく機能しており、sendgrid を介してログに記録されています。あるグループの電子メールが送信され、別のグループが送信されない原因がわかりません。これは本当に困惑しています。構文に明らかな誤りはなく、使用する値は正しいデータ型であり、nil ではありません。

この奇妙な問題の助けをいただければ幸いです。

4

2 に答える 2

2

解決策は非常にシンプルになったので、このスレッドを見つけて助けが必要な人のために、少なくとも私がやったことを投稿します.

development.rb で、エラーが発生していることを確認するために次のことを行いました。

config.action_mailer.raise_delivery_errors = true

そして、このメッセージを受け取りました:

Net::SMTPFatalError - 550 Cannot receive from specified address <mypersonalemail@test.com>: Unauthenticated senders not allowed

.env に入力した情報で認証されたと思っていたことを考えると、これは奇妙なことです。その理由をまだ解明しようとしていますが、ウェルカム メールがどのように送信されたのかはまだわかりません。

案の定、認証のために smtp 設定をハードコードされた値に変更することは魅力的でした。ここで問題は、ENV が nil にならないようにする方法です...

最終的な解決策は、単に私が間違ったローカルホストにいることでした。ポート3000でレールのデフォルトのレールサーバーを使用していましたが、フォアマンスタート(デフォルトであるかどうかはわかりませんが、私のプロジェクトの場合)は代わりにポート5000を使用していました。

于 2013-01-04T09:58:25.060 に答える