2009-12-17 16 views
1

我尝试创建以下功能:您注册并收到一封电子邮件,如[email protected],并且当您向此电子邮件发送某些内容时,它会自动显示在您的墙上。 ..所以我的问题是如何实现电子邮件的创建和邮件本身的接收。 任何想法?在Rails中玩弄邮件

+0

我的大问题是创造这些邮件帐户...或者以某种方式使用某种通配符执行此操作 – 2009-12-17 10:09:24

回答

1

Ruby提供可用于登录到您的电子邮件帐户的Net/IMAP和Net/POP3。 Here's a small tutorial

POP3

pop = Net::POP3.new("pop.gmail.com", port) 
pop.enable_ssl 
pop.start('YourAccount', 'YourPassword') 
if pop.mails.empty? 
    puts 'No mail.' 
else 
    i = 0 
    pop.each_mail do |m| 
    File.open("inbox/#{i}", 'w') do |f| 
     f.write m.pop 
    end 
    m.delete 
    i += 1 
    end 
    puts "#{pop.mails.size} mails popped." 
end 
pop.finish 

IMAP

imap = Net::IMAP.new('imap.gmail.com') 
imap.authenticate('LOGIN', 'username', 'password') 
imap.select('INBOX') 
imap.search(['ALL']).each do |message_id| 
    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
    MailReader.receive(msg) 
    imap.store(message_id, "+FLAGS", [:Deleted]) 
end 
imap.expunge() 
1

发送电子邮件很简单。只需看看ActionMailer Basics。如果您还想接收电子邮件,则应该编写一个守护程序,该守护程序在背景中连续从邮件服务器获取邮件。

这里说通过POP邮件获取一个片段:

require 'net/pop' 

config = { 
    :host => "mail.example.com", 
    :user => "[email protected]", 
    :password => "…", 
    :port => 110, 
    :timeout => 10 
} 

pop = Net::POP3.new(config[:host])  
pop.start(config[:user], config[:password])  

if pop.mails.empty? 
    puts "No mails…" 
else 
    pop.mails.each do |mail| 
    # do stuff with mail 
    end 
end 

这是纯Ruby码,不需要对这个片段的Rails。

1

可能有其他的选择,但是这就是我们如何做到这一点:

  • 后缀
  • Rails的计划作业

后缀允许你指定一个MySQL表/视图,以检查是否电子邮件地址是否存在。您也可以定义邮件转发。

  • 创建一个数据库视图来匹配后缀
    • 要求此视图应该包含所有的电子邮件地址,并将其转发到不同的邮件帐户,比如mailparser。现在
  • 你的Rails可以
    • 使用POP3/IMAP前端的邮件服务器(你应该安装了Dovecot或快递即可),以获取邮件和处理这些
    • 还是去地方上所有邮件所在的磁盘(检查Postfix配置)并将文件解析为TMail对象并处理它们。

不同的选项是让Postfix的通话script/runner与邮件数据,但轨道开机时可以采取长期和大量的内存,所以我更喜欢有一个cronjob/Backgroundjob /工作者要做到这一点。

P.S.电子邮件的创建将通过为您的Rails应用程序创建一个Model来完成,View将使用该模型作为基础。

+0

例如,我拥有域app.com,并且我有一个standart托管与rails等我的托管提供给我的邮件服务器。我只是接收电子邮件的东西像通配符...我应该在这种情况下安装postfix和其他?我希望你能理解我! – 2009-12-17 10:00:25

+0

我只想接收电子邮件和创建邮件账户,如[email protected]不发送电子邮件... – 2009-12-17 10:03:30

+0

我的问题是创建这些邮件账户... – 2009-12-17 10:08:39