質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

1回答

510閲覧

半角英数字の長文メール送信時、意図しない改行が入ってしまう

maki_k

総合スコア17

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2018/04/09 02:11

編集2018/04/10 03:16

バッチ処理にて例外が発生した場合、
スタックトレースをメールで送信する、という処理を行いたいと思っています。
メールの送信自体は行えるのですが、
一定の文字数を超えると全行末に改行文字がひとつ余計に付加されてしまうようです。

Ruby

1class BatchMailer < ActionMailer::Base 2 default from: 'hoge@example.com' 3 layout 'mailer' 4 5 def send_batch_error(batch_name, content, transaction_number = nil) 6 @content = convert_content(content, transaction_number) 7 mail( 8 subject: "連携エラー", 9 to: 'hoge@example.com' 10 ) do |format| 11 format.text 12 end 13 end 14 15 private 16 def convert_content(content, transaction_number) 17 content = [["occur_time", "2018/04/09 01:15:11"], 18 ["error_mess", 19 "/home/vagrant/\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in `block in run'\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in `open\r\n/home/vagrant/someapp/lib/\r\n/home/"], 20 ["error_batch_name", "Batch-base"]] 21 transaction_number= "1" 22 23 arr = content.map do |c| 24 [I18n.t(c[0], scope: :mailer), "#{c[1]}\r\n"] 25 end 26 if transaction_number.present? 27 arr = arr.join("\r\n") + "\r\n#{transaction_number}" 28 else 29 arr = arr.join("\r\n") 30 end 31 arr 32 end 33end

(※1, contentの内容がわかりやすいようメソッド内に直接記述していますが、本来は呼び出す時に渡しています)
(※2, viewはmailer.text.erbで<%= yield %>のみしています)

ここで、例えばcontent["error_mess"]のvalueが、
"/home/vagrant/\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in 'block in run'\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in 'open\r\n/home/vagrant/someapp/lib/\r\n/home/"
だと下記のように意図した改行となります。

発生時刻 2018/04/09 01:15:11 エラーメッセージ /home/vagrant/ /home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in `block in run' /home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in `open /home/vagrant/someapp/lib/ /home/ 発生箇所 Batch-base

content["error_mess"]のvalueが、
"/home/vagrant/\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in 'block in run'\r\n/home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in 'open\r\n/home/vagrant/someapp/lib/batchs/\r\n/home/"
だと改行文字が余計に付加されてしまいます。

発生時刻 2018/04/09 01:15:11 エラーメッセージ /home/vagrant/ /home/vagrant/someapp/lib/batchs/batch_lock.rb:32:in `block in run' /home/vagrant/someapp/lib/batchs/batch_lock.rb:8:in `open /home/vagrant/someapp/lib/batchs/ /home/ 発生箇所 Batch-base

メーラーの問題かとも思ったのですが、OperaMailとgmail(ブラウザ)いずれも発生しました。

内容はわかるのですが、
少し見難いので余計な改行文字を入れないように修正したいと考えています。
ぜひお力を借りられますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

理由はわからないのですが、
改行コードを\r\nから\nに修正したところ、
期待通りの改行となりました。

日本語の長文では再現しなかったことや
半角英数字でも文字数によって再現したりしなかったりすることに関しては
原因は不明のままなので、
時間を見つけて調査し、わかりましたらまたこちらに追記します。

投稿2018/04/10 08:59

maki_k

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問