首页 文章

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

提问于
浏览
2

我花了一个多星期的时间来 Build 一个基于Redmine(Bitnami 3.0.0)的汽车票提交系统,但有一个问题困扰了我很多,我一直在努力 .

这是我的背景:

需要 Build 一个自动提交票证系统,并通过一个电子邮件帐户自动创建所有票证 .

首先,我创建了一个用于创建故障单电子邮件地址的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'}) . 现在?
html_parts
其他
[电子邮件]
结束

parts.reject!做|部分|
part.attachment?
结束

@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标签并删除doctype指令
如果parts.any? {| P | p.mime_type =='text / html'}
@plain_text_body = strip_tags(@ plain_text_body.strip)
@ plain_text_body.sub! %r {^ <!DOCTYPE . * $},''
结束

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

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

1 回答

  • 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*
    

    我希望它能帮助你解决问题!

相关问题