Rubyメールの送信


あなたが働くRubyアプリを持って、それに電子メール配信機能を加える必要があると言いましょう.これは、ユーザー認証、または他の種類のトランザクションメールに関連する可能性があります、それは違いはありません.このチュートリアルは、Rubyでメールを送信するのを支援することを目的としています.
あなたが完全な記事を読みたいならば、Mailtrapのブログの上でそれをチェックしてください Sending Emails with Ruby

Rubyメールを送信するためのオプション


主に、3つのオプションのいずれかを選択することができます.
最も簡単なのはNET ::SMTPクラスを使用しています.これは、SMTP経由で電子メールを送信する機能を提供します.このオプションの欠点は、Net ::SMTPがメールを構成する機能を欠くということです.あなたは常に自分自身を作成することができますが、これは時間がかかります.
番目のオプションは、メール、ポニー、または他のような専用ルビー宝石を使用することです.これらのソリューションは、シンプルで効果的な方法で電子メールの活動を処理することができます.アクションメイラーはレールのプリズムを通して完璧な電子メールソリューションです.そして、おそらく、これはあなたの選択になります.
三つ目のオプションはクラスソケットです.主に、このクラスでは、プロセス間またはプロセス内の通信を設定できます.したがって、メール送信も同様に実装することができます.しかし、実際には、ソケットが広範な機能を提供していないということです.
さて、説明した解決策を使ってメールを送りましょう.

ルビーでメールを送る方法


私たちの経験から、そのオプションの使用は、通常のWebアプリでは珍しいです.しかし、あなたが使用するならばmruby (いくつかのIOTデバイス上でのRuby言語の軽量化).また、Serverlessなコンピューティングで使用されるなら、それはします.AWS Lambda . 最初にこのスクリプトの例をチェックしてください.そうすれば詳細にそれを通過します.
require 'net/smtp'

message = <<END_OF_MESSAGE
From: YourRubyApp <[email protected]>
To: BestUserEver <[email protected]>
Subject: Any email subject you want
Date: Tue, 02 Jul 2019 15:00:34 +0800

Lorem Ipsum
END_OF_MESSAGE
Net::SMTP.start('your.smtp.server', 25) do |smtp|
  smtp.send_message message,
  '[email protected]',
  '[email protected]'
end
これはSMTPを介してテキストメールを送信する簡単な例ですhere ). つのヘッダーを見ることができます:から、件名、日付、日付.あなたが電子メール本文から空白行でそれらを分離する必要があることに留意してください.同様に重要なのはSMTPサーバに接続することです.Net::SMTP.start('your.smtp.server', 25) do |smtp|当然のことながら、‘your.smtp.server‘ , 25はデフォルトポート番号です.必要に応じて、ユーザー名、パスワード、または認証スキームのような他の詳細を指定することができます.以下のようになります.Net::SMTP.start('your.smtp.server', 25, ‘localhost’, ‘username’, ‘password’ :plain) do |smtp|ここでは、ユーザ名とパスワードをプレーンテキスト形式でSMTPサーバに接続し、クライアントのホスト名をlocalhostとします.
その後、send_message メソッドと送信者と受信者のパラメータをパラメータとして指定します.SMTPのブロック形式.スタートNet::SMTP.start('your.smtp.server', 25) do |smtp| ) SMTPセッションを自動的に閉じます.
Ruby Cookbookでは、電子メールを手動で構築しなければならないので、Net ::SMTPライブラリで電子メールを送ることはミニマリズムと呼ばれています.それにもかかわらず、あなたが考えるかもしれない絶望的ではない.どのようにHTMLコンテンツを使用して電子メールを強化することができますし、添付ファイルを追加する方法を見てみましょう.
でのメールの送信
メッセージセクションを参照するこのスクリプト例をチェックしてください.
message = <<END_OF_MESSAGE
From: YourRubyApp <[email protected]>
To: BestUserEver <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: Any email subject you want
Date: Tue, 02 Jul 2019 15:00:34 +0800

A bit of plain text.

<strong>The beginning of your HTML content.</strong>
<h1>And some headline, as well.</h1>
END_OF_MESSAGE

メッセージ本体のHTMLタグとは別に、2つの追加ヘッダがあります.MIME-Version and Content-type . MIMEは多目的インターネットメール拡張子を意味します.これは、単一のメッセージ本文で別のコンテンツタイプを結合することができますインターネット電子メールプロトコルへの拡張です.値MIME-Version は典型的に1.0である.メッセージがMIMEフォーマットであることを示します.
に関してはContent-type ヘッダーは、すべてクリアです.この場合、HTMLとプレーンテキストの2種類があります.また、定義境界を使用してこれらのコンテンツタイプを分離するようにしてください.
MIMEのバージョンとcontent typeを除いて、他のMIMEヘッダを使用できます.
  • Content-Disposition – プレゼンテーションスタイル(インラインまたは添付ファイル)を指定します
  • Content-Transfer-Encoding – バイナリエンコードからテキストエンコーディングスキーム( 7ビット、quoted - printable、base 64、8 bit、binary )を表します.
  • の添付ファイルをメールで送信する
    添付ファイルなどPDFファイルを追加しましょう.この場合、我々は更新する必要がありますContent-type 混合する.また、pack("m") 添付ファイルをbase 64エンコードでエンコードする機能.
    require 'net/smtp'
    
    filename = "/tmp/Attachment.pdf"
    file_content = File.read(filename)
    encoded_content = [file_content].pack("m")   # base64
    
    marker = "AUNIQUEMARKER"
    
    その後、メールの3つの部分を定義する必要があります.
    第1部主主犯
    part1 = <<END_OF_MESSAGE
    From: YourRubyApp <[email protected]>
    To: BestUserEver <[email protected]>
    Subject: Adding attachment to email
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary = #{marker}
    --#{marker}
    END_OF_MESSAGE
    
    パート2 -メッセージアクション
    part2 = <<END_OF_MESSAGE
    Content-Type: text/html
    Content-Transfer-Encoding:8bit
    
    A bit of plain text.
    
    <strong>The beginning of your HTML content.</strong>
    <h1>And some headline, as well.</h1>
    --#{marker}
    END_OF_MESSAGE
    
    第3部アタッチメント
    part3 = <<END_OF_MESSAGE
    Content-Type: multipart/mixed; name = "#{filename}"
    Content-Transfer-Encoding:base64
    Content-Disposition: attachment; filename = "#{filename}"
    
    #{encoded_content}
    --#{marker}--
    END_OF_MESSAGE
    Now, we can put all the parts together and finalize the script. That’s how it will look:
    require 'net/smtp'
    
    filename = "/tmp/Attachment.pdf"
    file_content = File.read(filename)
    encoded_content = [file_content].pack("m")   # base64
    
    marker = "AUNIQUEMARKER"
    
    part1 = <<END_OF_MESSAGE
    From: YourRubyApp <[email protected]>
    To: BestUserEver <[email protected]>
    Subject: Adding attachment to email
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary = #{marker}
    --#{marker}
    END_OF_MESSAGE
    
    part2 = <<END_OF_MESSAGE
    Content-Type: text/html
    Content-Transfer-Encoding:8bit
    
    A bit of plain text.
    
    <strong>The beginning of your HTML content.</strong>
    <h1>And some headline, as well.</h1>
    --#{marker}
    END_OF_MESSAGE
    
    part3 = <<END_OF_MESSAGE
    Content-Type: multipart/mixed; name = "#{filename}"
    Content-Transfer-Encoding:base64
    Content-Disposition: attachment; filename = "#{filename}"
    
    #{encoded_content}
    --#{marker}--
    END_OF_MESSAGE
    
    message = part1 + part2 + part3
    
    begin
      Net::SMTP.start('your.smtp.server', 25) do |smtp|
        smtp.send_message message,
        '[email protected]',
        '[email protected]'
      end
    
    私はNet ::SMTPで複数の受信者に電子メールを送ることができますか?
    確かに、できます.send_message 受信者のメールを含む2番目以降の引数を期待します.例えば、
    Net::SMTP.start('your.smtp.server', 25) do |smtp|
      smtp.send_message message,
      '[email protected]',
      '[email protected]',
      ‘[email protected]’,
      ‘[email protected]
    end
    
    

    メールを送信するためのベストルビー宝石


    ルビー生態系では、あなたの電子メールの経験を送信を向上させることができる特定の電子メールの宝石を見つけることができます.
    Rubyメール
    このライブラリは、電子メールを送信し、受信を含むすべての電子メール関連の活動を管理するためのアクセスの単一のポイントを与えることを目的としています.
    ポニー
    あなたは、1つのコマンドで電子メールを送ることについておとぎ話を聞いたかもしれません.あなたの帽子を保持し、それが本当だし、提供する原因Pony ジェム.
    アクティメーラー
    これは、レール上のメールを送信するための最も人気のある宝石です.場合にはあなたのアプリケーションの上に書かれている、ActionMailer確かに来るでしょう.それはあなたのメールのクラスとビューを使用してメールを送信することができます.

    MailTapを使用したメール送信テスト


    セットアップは非常に簡単です.デモインボックスに入ったら、SMTP設定タブでSMTP資格情報をコピーし、コードに挿入します.または、統合セクションで簡単なメッセージのテンプレートを使用する準備ができます.ちょうどあなたのアプリケーションが組み込まれているプログラミング言語やフレームワークを選択します.
    require 'net/smtp'
    
    message = <<END_OF_MESSAGE
    From: YourRubyApp <[email protected]>
    To: BestUserEver <[email protected]>
    Subject: Any email subject you want
    Date: Tue, 02 Jul 2019 15:00:34 +0800
    
    Lorem Ipsum
    END_OF_MESSAGE
    Net::SMTP.start('smtp.mailtrap.io', 587, '<username>', '<password>', :cram_md5) do |smtp|
      smtp.send_message message,
      '[email protected]',
      '[email protected]'
    end
    
    すべてが大丈夫なら、Mailtrapのデモ受信トレイにあなたのメッセージが表示されます.また、HTMLコンテンツと添付ファイルを使用して電子メールをチェックしようとすることができます.MailTrapは、どのようにあなたの電子メールが表示され、必要に応じてHTMLをチェックすることができます.
    クリエイトアMailtrap account そして、無料で自分でそれをテストしてみてください!
    あなたはどのようにテストし、Rubyでメールを送信する方法についての完全なチュートリアルを読んだことがあります.まだルビーメール、ポニーとアクションのメーラーになるときにチェックアウトする多くがあります.Ruby Gems & SocketクラスについてSending Emails with Ruby article Mailtrapで.入出力