Mandrill by MailChimpからSendGridに乗り換えたらテキストメールが改行されなくなった

#乗り換えなきゃいけない
2月終わり頃に Heroku から「Mandrill by MailChimp は使えなくなりますので SendGrid など他のサービスに乗り換えてね」という連絡が来てましたが、期限である4/27が近付いてきました。

> The Mandrill team has chosen not to continue development of this add-on and decided to make a platform change that impacts both direct customers and Heroku customers.
You will not be able to migrate your existing account; a new account will need to be created. For additional details on these changes, please refer to [Mandrill's blog post](http://blog.mandrill.com/important-changes-to-mandrill.html).
The Mandrill add-on will be removed from all apps on Wednesday, 4/27. We advise you to remove it yourself before that either via the Dashboard or via the CLI.
Please consider using SendGrid or another add-on in Elements for your application’s transactional email needs. To help you with this transition, please refer to the migration guides for each of our email add-ons in our blog post, “[Migrating from the Mandrill Add-on](https://blog.heroku.com/archives/2016/3/2/migrating_from_the_mandrill_add_on)”.

ということで例として挙げてある SendGrid に乗り換えて動作試験してみました。しかし、テキストメールの改行で改行されずに空白しか出力されない。
同様のトラブルに見舞われている人が居るかもしれないと思い、調査した上で Qiita に上げてみました。

#原因はHTMLメールへの変換
検索してみたところ、その理由になりそうなことが SendGrid のヘルプに載っていました。

>##お問い合せ内容
送信したメールの改行が削除されてしまいます。何故でしょうか？どのように対処すればよいでしょうか？
##考えられる原因
テキストメールのHTML変換機能（以下、HTML変換機能）が有効になっていることが原因として考えられます。この機能は、元のテキストメール（Content-typeがtext/plain）の本文をHTML変換してマルチパートメール（Content-typeがmultipart/alternative）の1パートとして追加します。その際、改行コードはHTMLの改行タグに変換されません。このため、メールクライアントでtext/htmlパートを確認すると、変換されたメールの改行が削除されているように見えます。
##対処方法
- HTML変換機能を利用しない

>　：
アカウント作成直後はHTML変換機能が有効になっています。この機能は[Plain Content設定](https://app.sendgrid.com/settings/mail_settings)をON（ACTIVE）にすることで停止することができます。
![Mail Setting](https://sendgrid-jp.s3.amazonaws.com/blog/wp-content/uploads/2014/07/plain-content-1.png)

>[よくある質問 – メール改行トラブル編 | ブログ | SendGrid](https://sendgrid.kke.co.jp/blog/?p=1521)

上記設定でプレーンメールのみにすることで改行表示されるようになりました。
HTML メールのパートが作られないので **開封確認は出来ないようです** 。私の場合は特に不要でしたが、開封確認を利用する予定がある場合にはご注意ください。

#サンプルライブラリ
一例です。

```rb:Gemfile
source "https://rubygems.org"
gem 'mail-iso-2022-jp'
gem 'dotenv'
```
```bash:.env
SENDGRID_USERNAME='YOUR_SENDGRID_USERNAME'
SENDGRID_PASSWORD='YOUR_SENDGRID_PASSWORD'
```
```rb:sendmail.rb
require 'mail-iso-2022-jp'
require 'mail'
require 'dotenv'
Dotenv.load

def send_via_sendgrid(subject, mail_text, send_from_name = "", send_to = [], send_cc = [])
  Mail.defaults do
    delivery_method   :smtp, {
      address:        'smtp.sendgrid.net',
      port:           '587',
      domain:         'heroku.com',
      user_name:      ENV['SENDGRID_USERNAME'],
      password:       ENV['SENDGRID_PASSWORD'],
      authentication: :plain,
      enable_starttls_auto: true
    }
  end
  
  Mail.new(charset: 'ISO-2022-JP') {
    from "#{send_from_name} <#{ENV['SENDGRID_USERNAME']}>"
    to send_to
    cc send_cc
    subject subject
    body mail_text
  }.deliver!
  
  puts "email send."
end
```
##Gemfileでの補足事項
なお、mail-iso-2022-jp gem v2.0.4 は現在 mail gem 最新の v2.6.4 に対応していないので、

```rb:Gemfile
gem 'mail'
gem 'mail-iso-2022-jp'
```
とするとエラーになります。 `gem 'mail'` を書く必要がないので省きましたが、どうしても書きたい場合には

```rb:Gemfile
gem 'mail-iso-2022-jp'
gem 'mail'
```
もしくは

```rb:Gemfile
gem 'mail', '2.6.3'
gem 'mail-iso-2022-jp'
```
としましょう。ただし後者にすると mail-iso-2022-jp gem が更新されて mail gem v2.6.4 に対応した後に `bundle update` しても v2.6.3 のままになります。
#Rubyでの参考リンク
- [SendGrid | Heroku Dev Center](https://devcenter.heroku.com/articles/sendgrid#ruby-rails)
- [Ruby - メール(ISO-2022-JP)送信！ - mk-mode BLOG](http://www.mk-mode.com/octopress/2015/05/03/ruby-sending-mail-iso-2022-jp/)
- [mikel/mail: A Really Ruby Mail Library](https://github.com/mikel/mail)
- [kuroda/mail-iso-2022-jp: A patch that provides 'mail' gem with iso-2022-jp conversion capability.](https://github.com/kuroda/mail-iso-2022-jp)

#ひとりごと１：ところで
SendGrid 反応悪いっすね>_<
Mandrill だと直ぐに届いたのに。

#ひとりごと２：トラッキング設定うざい
テキストメールに URL を書いてたら勝手に書き換えられた>_<
[Tracking 設定](https://app.sendgrid.com/settings/tracking)の「Click Tracking」設定を OFF にしなきゃダメです。
なぜか当初「Click Tracking」設定が表示されずに悩んだ。