チケットをメールで登録すると、題名が途切れてしまいます

1,068 views
Skip to first unread message

oshi

unread,
Aug 19, 2014, 11:41:44 PM8/19/14
to redmine-...@googlegroups.com
初めまして、こんにちは

チケットをメールで登録すると、メールの件名がチケットの題名になりますが、
その題名がなぜか途切れてしまうことがあります。

一例)
件名 : イベントを検知しました:[試験][A1111111B]
題名 : イベントを検知しました:[

件名 : イベントを検知しました至急解決に向かって取り掛かってください
題名 : イベントを検知しました至急

件名 : ABC Defghi Jklmnopqrstuv からのテスト・メッセージです。
題名 : ABC Defghi Jklmnopqrstuv からのテス

他多数

表示の関係で見えないというわけではなく、題名そのものが変わっています。
法則性も自分では特に見つけることはできませんでした。

どのようにすれば本来の件名通りに登録されるでしょうか。

原因と解決方法をどうかご教授をお願いいたします。


<動作環境>
OS:Windows Server 2012 standard 64ビット
redmine:2.5.1-1

ngyuki

unread,
Aug 20, 2014, 4:09:46 AM8/20/14
to redmine-...@googlegroups.com
こんにちわ。

> チケットをメールで登録すると、メールの件名がチケットの題名になりますが、
> その題名がなぜか途切れてしまうことがあります。

Windows Server とのことなので、config/configuration.yml の email_delivery で
MTA を指定していると思うのですが、qmail でしょうか?

以前、MTA として qmail を使っていたころ、
エンコードされた Subject の中途半端なところに改行が挿入され、
Subject が途中で切れて表示されることがありました。

かなり昔のことなので、どうやて解決したかはもとより、
そもそも Redmine だったかすらうろ覚えですが(汗、Mantis だったかも・・・
もし変えられるなら MTA を試しに変えてみてはいかがでしょうか?

oshi

unread,
Aug 20, 2014, 5:08:22 AM8/20/14
to redmine-...@googlegroups.com
ngyukiさん、情報ありがとうございます。

>Windows Server とのことなので、config/configuration.yml の email_delivery で 
>MTA を指定していると思うのですが、qmail でしょうか? 
MTAの指定ではなく、メールでのチケット登録方法は下記コマンドで行っています。
【実行コマンド】
rake redmine:email:receive_pop3  RAILS_ENV="production" host=****** port=****** username=****** password=******

pop3でメール取得が可能とのことでしたので、こちらを採用しました。
上記コマンドをbatファイルに記載し、タスクスケジューラで定期的に実行する方法で運用を考えています。
実際に上記方法でメールでのチケット登録自体は実現していますが
題名の件だけが解決できていない状態なのです。

>以前、MTA として qmail を使っていたころ、 
>エンコードされた Subject の中途半端なところに改行が挿入され、 
>Subject が途中で切れて表示されることがありました。 
そういったこともあるのですね。
redmineですと「mail_handler.rb」あたりに当該処理があるのでしょうか。
調べてみようと思います。

ngyuki

unread,
Aug 20, 2014, 5:12:56 AM8/20/14
to redmine-...@googlegroups.com
あ、すみません、めちゃめちゃ誤読していました。

メールから登録したときにチケットの題名が途中で切れてしまうということですね。

下記の内容は Redmine から送られるメールのサブジェクトが途中で切れる、ということなので全然関係ありません。


> 以前、MTA として qmail を使っていたころ、
> エンコードされた Subject の中途半端なところに改行が挿入され、
> Subject が途中で切れて表示されることがありました。

失礼しました。

oshi

unread,
Aug 20, 2014, 5:37:09 AM8/20/14
to redmine-...@googlegroups.com
>下記の内容は Redmine から送られるメールのサブジェクトが途中で切れる、ということなので全然関係ありません。
そうだったのですね、了解しました。

何かお気づきの点がありましたら情報提供頂けますと大変助かります。
また、進展ありましたら情報共有のため書き込もうと思います。

引き続き、よろしくお願い致します。

nobu_toyofuku

unread,
Aug 20, 2014, 5:52:34 AM8/20/14
to redmine-...@googlegroups.com

app/models/mail_handler.rb の def receive_issue に
  issue.subject = cleaned_up_subject
とあって cleaned_up_subject は
  def cleaned_up_subject
    subject = email.subject.to_s
    subject.strip[0,255]
  end
となってますがこの strip ですかね。
エンコードされた文字列がここで切られた後、デコードされてるのかも。
---

oshi

unread,
Aug 21, 2014, 8:27:06 PM8/21/14
to redmine-...@googlegroups.com
nobu_toyofukuさん
詳細な情報ありがとうございます。
エンコード、デコードが行われているとすると、メーラーの文字コードも
関係してきそうな気がします。
メール本文も同様にエンコードとデコードがされているかわかっておりませんが
メール本文に関しては文字が切れたりするようなことは
今のところ確認できておりません。
ご提示頂いたソース部分も含め確認させて頂きます。

kit kat

unread,
Oct 21, 2014, 10:43:16 PM10/21/14
to redmine-...@googlegroups.com

2014年8月20日水曜日 18時52分34秒 UTC+9 nobu_toyofuku:
私も同じ現象で困っていたため調べていたのですが、このstripの処理前にすでに途中で切れたサブジェクトになっているようです。
途切れる条件を調べていたところどうやらsubjectの二行目移行が参照できていないようです。
メールヘッダ内
>Subject: =?ISO-2022-JP?************************************************==?=
>=?ISO-2022-JP?*************************==?=
となっていた場合1行目の部分のみが件名となっており、2行目以降が途切れている状態になっているようです。
現在もまだ解決方法が見つかっていませんがこのような状況です。

Hiroaki Itsuka

unread,
Nov 6, 2014, 3:40:42 AM11/6/14
to redmine-...@googlegroups.com
こんにちわ。
以前私も同じことでハマってました。
色々調べたり試した結果、件名の取得方法をメールの文字コードによって分ける必要があるようでした。
今はmail_handler.rbに以下の修正を加えることで切れることなく登録できています。
(コメント行は試行錯誤の後です。。。上手くいったあとはputのとこもコメント化しといたほうがいいかもです)
 
①先頭に追加
require 'nkf'
require 'Kconv'
#require 'mail'
require 'iconv'
 
②cleaned_up_subjectに追加
  def cleaned_up_subject
#    subject = NKF.nkf('-w --cp932',email.subject.to_s)
#start
#    subject = email.subject.to_s.gsub(/\r\n|\r/,"")
#    subject = Kconv.toutf8(email.attr["envelope"].subject)
#    subject = Kconv.toutf8(email.subject)
     if ( Kconv.guess(email[:subject].value) == Encoding::US_ASCII && Kconv.guess(email.subject) == Encoding::SJIS )
       subject = email.subject
     else
       subject = Kconv.toutf8(email[:subject].value)
     end
     puts subject
     puts email[:subject].value
     puts Kconv.guess(email[:subject].value)
     puts email.subject
     puts Kconv.guess(email.subject)
#     puts email[:subject].value.encode('UTF-8')
#     puts Iconv.conv('UTF-8', 'GB2312', email[:subject].value)
#     puts Iconv.conv('UTF-8', 'GB2312', email.subject.to_s)
#     puts NKF.nkf('-wMB --cp932',email.subject.to_s)
#     puts Kconv.toutf8(email.subject)
#    subject = NKF.nkf('-w --cp932',subject)
#    puts subject
#end
    subject.strip[0,255]
  end

 

kit kat

unread,
Nov 12, 2014, 5:20:42 AM11/12/14
to redmine-...@googlegroups.com
2014年11月6日木曜日 17時40分42秒 UTC+9 Hiroaki Itsuka:
 Hiroaki Itsuka さんありがとうございます。

トピック作成者ではないですが、いただいた対処法を検証いたしました。
1. ./Gemfileに以下を追記。
gem "rubysl-nkf", "~> 2.0.1"
gem "iconv","~>1.0.4"

2.bundle install を実行
bundle install --path vendor/bundle/

3../app/models/mail_handler.rbに記載いただいた内容を追記

#先頭に
require 'nkf'
require 'kconv'
require 'iconv'

#cleaned_up_subjectを以下に変更
  def cleaned_up_subject

     if ( Kconv.guess(email[:subject].value) == Encoding::US_ASCII && Kconv.guess(email.subject) == Encoding::SJIS )
       subject = email.subject
     else
       subject = Kconv.toutf8(email[:subject].value)
     end
    subject.strip[0,255]
  end

#  def cleaned_up_subject
#   subject = email.subject
#    subject.strip[0,255]
#  end

4.redmineを再起動
service httpd restart

上記で当方環境でもメールの件名が切れなくなったことを確認いたしました。
ありがとうございました!

 
Reply all
Reply to author
Forward
0 new messages