【问题标题】:Rails ActionMailer copy email to sent folder SMTP rubyRails ActionMailer 将电子邮件复制到已发送文件夹 SMTP ruby
【发布时间】:2014-11-26 00:14:54
【问题描述】:

您好,我可以使用发送邮件功能发送我想要的电子邮件,但客户端发送文件夹中没有显示已发送邮件。

我是否必须以某种方式手动将电子邮件复制到已发送文件夹?配置如下,可以发送邮件,仅供参考

    config.action_mailer.smtp_settings = {
      address:              'send.XXX.com',
      port:                 587,
      domain:               'XXX.com',
      user_name:            'X@XXX.com',
      password:             'XXX',
      authentication:       'plain',
      enable_starttls_auto: true  }

如何在 Rails 中做到这一点

更新

使用 IMAP 可以轻松完成,只需创建新邮件、Mail.new 等即可

   target_mailbox = 'Inbox.Sent'
   imap = Net::IMAP.new("imap.someserver.com")
   imap.authenticate(email_account.authentication, email_account.user_name, email_account.password)  
   imap.create(target_mailbox) unless imap.list('', target_mailbox)
   imap.append(target_mailbox, imap_sent_mail_copy.to_s)
   imap.logout
   imap.disconnect

【问题讨论】:

  • 你的问题解决了吗?

标签: ruby-on-rails email smtp actionmailer


【解决方案1】:
          target_mailbox = 'Inbox.Sent'
          imap = Net::IMAP.new("imap.someserver.com")
          imap.authenticate(email_account.authentication, email_account.user_name, email_account.password)  
          imap.create(target_mailbox) unless imap.list('', target_mailbox)
          imap.append(target_mailbox, imap_sent_mail_copy.to_s)
          imap.logout
          imap.disconnect

其中 imap_sent_mail_copy.to_s 只是一个 Mail 实例

imap_sent_mail_copy = Mail.new do
  to to_email_address
  from from
  subject subject
  message_id message_id
  if attachment_ids!=""
    docs = Document.where(id: attachment_ids)
    docs.each do |a|
      doc = Document.find_by_id(a)
        attachments["#{doc.name}.#{doc.file_ext}"] = File.read("#{Rails.root}/public#{doc.attachment_url}") if doc
    end
  end
  html_part do
    content_type 'text/html; charset=UTF-8' 
    body "#{message} #{signature}"
  end
end

【讨论】:

  • imap_sent_mail_copy 来自哪里,这个答案与 ActionMailer 有什么关系?如何将此代码添加到 ApplicationMailer 以便保存所有发送的电子邮件?
  • 它是一个邮件实例,见上面的答案
  • 从您的 ActionMailer 方法中,您可以通过 mailObj = mail(...) 接收一个对象,然后 mailObj.body.encoded 分配给 html_part 做正文。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 2014-12-31
  • 2011-08-11
  • 2011-03-13
  • 2016-02-02
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
相关资源
最近更新 更多