如何使用ActionMailer在IMAP“已发送”框中保存外发电子邮件的副本?

时间:2010-04-30 16:52:31

标签: ruby-on-rails imap actionmailer

当我使用常规客户端并通过SMTP为IMAP帐户发送电子邮件时,该出站电子邮件会保存在IMAP“已发送”框中。

当我使用Ruby on Rails ActionMailer发送电子邮件时,我怎么能有相同的行为?

2 个答案:

答案 0 :(得分:6)

Ruby IMAP库包含一个append方法,您可以使用该方法将这些出站电子邮件“保存”到您选择的文件夹中:

# Let's assume the_mail is the Mail object you want to save
the_mail = Mail.new

# The name of the target mailbox
target_mailbox = 'Sent'

# Connect to the IMAP server
imap = Net::IMAP.new(YOUR_EMAIL_SERVER)
imap.authenticate('PLAIN', YOUR_LOGIN, YOUR_PASSWORD)  

# Create the target mailbox if it does not exist
imap.create(target_mailbox) unless imap.list('', target_mailbox)

# Save the message
imap.append(target_mailbox, the_mail.to_s)

# Close the connection
imap.logout
imap.disconnect

希望这有帮助!

答案 1 :(得分:1)

根据我的说法,这往往是您邮件客户端程序中的一个设置;但我在ActionMailer中看不到它的支持。

如果您发现消息存储在服务器上,但只是在错误的位置,则有一个ruby IMAP库。 http://ruby-doc.org/stdlib/libdoc/net/imap/rdoc/index.html

解决方法可能是将每条消息发送到您的原始电子邮件地址sender@yourdomain.com,也许使用sender+sent@yourdomain.com等标记,然后在您将要查看此收件箱的客户端中设置规则用于将所有带有TO:的电子邮件路由到“已发送邮件”框。

如果您使用gmail作为rails应用程序的邮件服务器,它会自动将副本保存在已发送的邮件中。