6

次のようなメーラーがあります。

class Payments::LateNoticesMailer < AsyncMailer
  def notice(payment_id)
    @payment = PaymentDecorator.find(payment_id)
    @invoice = @payment.invoice
    template = "payments/invoices/#{@payment.made_with_type.downcase}/show"

    attachments["#{@payment.invoice_filename}.pdf"] =
      WickedPdf.new.pdf_from_string( render_to_string( pdf:      @payment.invoice_filename,
                                                       formats:  [:pdf],
                                                       template: template,
                                                       layout:   "layouts/pdf.html"))

    mail to:      @payment.payer_email,
         from:    '"RentingSmart" <no-reply@rentingsmart.com>',
         cc:      @payment.landlord_email,
         subject: "*** Your rent payment of #{@payment.amount_due} is overdue ***"
  end
end

SendGrid を使用して送信します。これが私の問題です。Gmail 経由で電子メールを開くと、すべてがうまく機能し、電子メールのテキストがそこにあり、添付ファイルが添付されています。ただし、OSX の Mail.app または iPhone で開くと、次のように表示されます。

これは MIME 形式のマルチパート メッセージです...

誰にもヒントはありますか?Railsガイドに正しく従っていると思います。

これが私が行う呼び出しですPayments::LateNoticesMailer.notice(payment.id).deliver

4

3 に答える 3

2

ActionMailer::Baseの API ドキュメントによると、複数のテンプレート タイプが使用されている場合、それらすべてがレンダリングされ、MIME タイプは自動的に multipart/alternative に設定されます。

添付ファイルを追加すると、添付ファイルは multipart/mixed コンテナ内に配置されます。

最初の質問: text や html などの他のタイプをレンダリングしていますか? PDF部分だけでメールを送信することはお勧めしません。テキスト部分と html 部分が受信者に添付ファイルを開くように指示するだけの場合でも、それらはそこにあるはずです。理想的には、text/html 部分により多くの情報があるでしょう。

次に、pdf を添付ファイルとしてではなく、インラインで表示しようとしていますか?

電子メールの生のソースを見て、表示されている構造で投稿を更新できますか? ヘッダーに初期 MIME タイプが設定されます。次のようになります。

Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="--==_mimepart_50596418be947_c7223fec9d834d3874256";
 charset=UTF-8
Content-Transfer-Encoding: 7bit

これは、従うべき部分が同じ情報の代替バージョンではなく、電子メール クライアントにそれらを区別して表示するように指示することを示しています。

メールの後半では、テキストと html 部分は次のように続く必要があります。

----==_mimepart_50596418be947_c7223fec9d834d3874256
Date: Wed, 19 Sep 2012 06:20:12 +0000
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_50596418be468_c7223fec9d834d38741a5";
 charset=UTF-8
Content-Transfer-Encoding: 7bit

最後に、エンコードされた pdf 部分には、次のような MIME ヘッダーが必要です。

----==_mimepart_50596418be947_c7223fec9d834d3874256
Date: Wed, 19 Sep 2012 06:20:12 +0000
Mime-Version: 1.0
Content-Type: application/pdf;
 charset=UTF-8;
 filename=terms.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=terms.pdf

テキスト、html パーツ、および大きな pdf を含む単純なテスト メールを自分宛に送信したところ、iPhone でメールを表示できました。html 部分と、pdf をダウンロードできるアイコンが表示されます。

于 2012-09-19T06:36:37.933 に答える
1

一部の電子メール クライアントでは、電子メールを正しく表示するために、電子メールにプレーン テキスト部分が必要な場合があります。

于 2012-09-19T05:58:21.053 に答える
0

Rails アプリを 2.3 から 3.2 に変換しているときに、このメッセージに出くわしました。メーラーを正しく変換したつもりでしたがcontent_type: "multipart/mixed"、オプションで古いバージョンが指定されていました。ただし、それを削除すると、添付ファイルと HTML とプレーンテキストが正しく表示されました。そこにその設定があると、Rails がさまざまな種類のコンテンツを配置するために行うことはすべて上書きされたと思いますが、これは私が望んでいたことではありませんでした。私をその方向に導いてくれた元の答えに感謝します。

于 2013-07-26T22:57:11.750 に答える