电子邮件可以标记为已读并留在邮件服务器中,无法在Redmine中自动创建新问题

时间:2015-03-17 08:34:51

标签: ruby-on-rails email outlook redmine

我花了一个多星期的时间来建立一个基于Redmine(Bitnami 3.0.0)的汽车票提交系统,但是有一个问题让我很困惑,直到现在我都在苦苦挣扎。

这是我的背景:

需要建立自动提单系统,并通过一个电子邮件帐户自动创建所有故障单。

首先,我创建了一个用于创建故障单电子邮件地址的Gmail帐户,让我们说“abc@gmail.com”,我的公司电子邮件地址是“sender@abc.com”。所有门票都可以自动创建,无需发送邮件至sender@abc.com至abc@gmail.com

  

sender@abc.com - > abc@gmail.com - >票证自动创建成功(通过abc@gmail.com创建票证)

但是,为了避免安全问题,需要使用名为ticket@abc.com的公司电子邮件帐户代替gmail帐户。 ticket@abc.com是一个共享邮箱。这是我的测试结果。

  

sender@abc.com - > ticket@abc.com - >票证自动创建失败(通过ticket@abc.com创建票证)

     

ticket@abc.com - > sender@abc.com - >票证自动创建失败(通过sender@abc.com创建票证)

     

abc@gmail.com - > sender@abc.com - >票证自动创建成功(通过sender@abc.com创建票证)

我可以从OWA网页上看到,如果失败,所有新电子邮件都已经通过并“标记为已读”,然后留在邮件服务器中。

这是我的命令:

rake redmine:email:receive_imap unknown_user=accept no_permission_check=1 RAILS_ENV="production" host=imap.abc.com port=143 username=ticket password=xxx project=projectname allow_override=project,subject,status,tracker,priority,category,author,desc,issue --trace

但是,跟踪

没有任何错误
C:\Bitnami\redmine-3.0.0-0\apps\redmine\htdocs>rake redmine:email:receive_imap unknown_user=accept no_permission_check=1 RAILS_ENV="production" host=imap.abc.com port=143 username=ticket password=xxx project=projectname allow_override=project,subject,status,tracker,priority,categ
ory,author,desc,issue --trace
DL is deprecated, please use Fiddle
** Invoke redmine:email:receive_imap (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute redmine:email:receive_imap

C:\Bitnami\redmine-3.0.0-0\apps\redmine\htdocs>\

调试级别也已打开。但这里只有我能从production.log中找到,只有我能看到的是“消息xx无法处理”,仅此而已...

Receiving message xx  
  [1m[36mSetting Load (0.0ms)[0m  [1mSELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'mail_from'  ORDER BY `settings`.`id` DESC LIMIT 1[0m
  [1m[35mUser Load (1.0ms)[0m  SELECT  DISTINCT `users`.* FROM `users` INNER JOIN `email_addresses` ON `email_addresses`.`user_id` = `users`.`id` WHERE `users`.`type` IN ('User', 'AnonymousUser') AND (LOWER(address) IN ('sender@abc.com'))  ORDER BY `users`.`id` ASC LIMIT 1
Message xx can not be processed

然后,我检查了C:\ Bitnami \ redmine-3.0.0-0 \ apps \ redmine \ htdocs \ lib \ redmine \ imap.rb

  if MailHandler.safe_receive(msg, options)
    logger.debug "Message #{uid} successfully received" if logger && logger.debug?
    if imap_options[:move_on_success]
      imap.uid_copy(uid, imap_options[:move_on_success])
    end
    imap.uid_store(uid, "+FLAGS", [:Seen, :Deleted])
  else
    logger.debug "Message #{uid} can not be processed" if logger && logger.debug?
    imap.uid_store(uid, "+FLAGS", [:Seen])
    if imap_options[:move_on_failure]
      imap.uid_copy(uid, imap_options[:move_on_failure])
      imap.uid_store(uid, "+FLAGS", [:Deleted])
    end
  end

每次,如果在公司电子邮件地址之间发送邮件,则MailHandler.safe_receive(msg,options)为false。但如果邮件从gmail发送到公司电子邮件地址,则确实如此。

我真的不知道是什么原因造成的,这是我公司邮箱配置的问题吗?我的公司正在使用Exchange Server。

有什么方法可以解决这个问题或任何解决方法吗?非常感谢你!

=============

其他: 我找出导致此问题的原因是因为我的电子邮件内容类型为“text / html”,如果是“text / plain”,则没有任何问题。

以下是我的新发现:

但看起来Redmine支持HTML Only电子邮件,我不知道为什么我的电子邮件无法处理。

以下是“mail_handler.rb”

的代码段
parts = if (text_parts = email.all_parts.select {|p| p.mime_type == 'text/plain'}).present?
          text_parts
        elsif (html_parts = email.all_parts.select {|p| p.mime_type == 'text/html'}).present?
          html_parts
        else
          [email]
        end

parts.reject! do |part|
  part.attachment?
end

@plain_text_body = parts.map do |p|
  body_charset = Mail::RubyVer.respond_to?(:pick_encoding) ?
                   Mail::RubyVer.pick_encoding(p.charset).to_s : p.charset
  Redmine::CodesetUtil.to_utf8(p.body.decoded, body_charset)
end.join("\r\n")

# strip html tags and remove doctype directive
if parts.any? {|p| p.mime_type == 'text/html'}
  @plain_text_body = strip_tags(@plain_text_body.strip)
  @plain_text_body.sub! %r{^<!DOCTYPE .*$}, ''
end

即使我的电子邮件是“Content-Type:text / html; charset = us-ascii”,它仍然无法处理。由Outlook 2010测试

是否有人有类似的问题或解决方案?谢谢!

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并且在没有找到任何解决方案的情况下专注于Redmine很多天。

最后,我决定查看我的Exchange Online参数并修改了用于Redmine的IMAP电子邮件帐户。

以下是使用Powershell连接到Exchange Online的链接: http://community.office365.com/en-us/f/158/t/158857.aspx

当然,如果您不使用此Exchange版本,则应该可以直接访问它。

以下是在Powershell中执行的将电子邮件转换为纯文本而非默认HTML的行:

Set-CASMailbox xxxx@yyyyyy.zz -ImapMessagesRetrievalMimeFormat TextOnly -imapUseProtocolDefaults $false

然后您可以使用以下行检查结果:

get-casmailbox xxxx@yyyyyy.zz | format-list imap*

我希望它可以帮助您解决问题!