在我的rails应用程序中,我使用此gem与Gmail API进行交互:https://github.com/gmailgem/gmail
以下是我发送电子邮件的方法:
gmail = Gmail.connect(params[:email], params[:password]) @email = params[:email] email = gmail.compose do to @email subject "Having fun in Puerto Rico!" body "Spent the day on the road..." end email.deliver!
我收到此错误:
An SMTP To address is required to send a message. Set the message smtp_envelope_to, to, cc, or bcc address.
电子邮件变量无法传递到块中.是什么造成的?如何传递动态电子邮件地址?
我确定它发生是因为@email
是一个实例变量,绑定到self
(有点等于self.email
).并且gmail模块可以self
使用像instance_eval
或者class_eval
所谓的"范围门"之类的方法轻松更改内部块.这是红宝石元编程的常规功能.
只需使用一个简单的变量,它就会被延续捕获.
email_to = params[:email] email = gmail.compose do to email_to ... end
我强烈建议不要将实例变量用作temp - 它们代表对象的状态.使用局部变量,这就是它们的设计目标.