Ruby HTML电子邮件模板中的Sinatra变量
我有一份工作联系表寄到西纳特拉。我现在尝试使用HTML模板发送电子邮件,但我无法让我的变量工作,它们只是显示为纯文本。这是代码Ruby HTML电子邮件模板中的Sinatra变量,ruby,email,sinatra,sendmail,Ruby,Email,Sinatra,Sendmail,我有一份工作联系表寄到西纳特拉。我现在尝试使用HTML模板发送电子邮件,但我无法让我的变量工作,它们只是显示为纯文本。这是代码 # for contact form def send_message senders_name = params[:name] senders_email = params[:email] senders_message = params[:message] Mail.deliver do to 'me@mywebsite.com'
# for contact form
def send_message
senders_name = params[:name]
senders_email = params[:email]
senders_message = params[:message]
Mail.deliver do
to 'me@mywebsite.com'
from senders_name + " <" + senders_email + ">"
subject 'Email from contact form on Website'
# body senders_message
html_part do
content_type 'text/html; charset=UTF-8'
body File.read('views/contact_form.erb')
end
end
end
联系方式的#
def发送消息
发送者名称=参数[:名称]
发件人\电子邮件=参数[:电子邮件]
发送者消息=参数[:消息]
邮递
到me@mywebsite.com'
来自发件人\u name+“”
主题“来自网站上联系人表单的电子邮件”
#身体寄件人信息
你是做什么的
内容类型为“文本/html”;字符集=UTF-8'
正文文件.read('views/contact_form.erb'))
结束
结束
结束
关于“意见/联系表格erb”
pygo联系表
来自
表单发送,一切正常,但发送电子邮件时除外。变量读取为“”,而不是实际值。
文件。读取将只返回文件的文本值,而不是ERB解析版本。这就是为什么你会在邮件正文中看到ERB标签,而不是你想要的
此外,这里还有一个问题不是你的错。由于Mail.deliver
为“方便”而使用自己的self
覆盖块上下文的方式,您无法访问通常应该能够访问的实例变量或Sinatra方法。这就是为什么你会得到NoMethodError
解决此问题的方法是在Mail.deliver
块之外呈现Sinatra模板,并将变量作为局部变量传递,如下所示:
def send_message
senders_name = params[:name]
senders_email = params[:email]
senders_message = params[:message]
html_body = erb :contact_form, locals: { senders_name: senders_name, senders_message: senders_message }
Mail.deliver do
to 'me@mywebsite.com'
from senders_name + " <" + senders_email + ">"
subject 'Email from contact form on Website'
# body senders_message
html_part do
content_type 'text/html; charset=UTF-8'
body html_body
end
end
end
def发送消息
发送者名称=参数[:名称]
发件人\电子邮件=参数[:电子邮件]
发送者消息=参数[:消息]
html_body=erb:contact_form,locals:{发送者名称:发送者名称,发送者消息:发送者消息}
邮递
到me@mywebsite.com'
来自发件人\u name+“”
主题“来自网站上联系人表单的电子邮件”
#身体寄件人信息
你是做什么的
内容类型为“文本/html”;字符集=UTF-8'
正文
结束
结束
结束
感谢您的回复。当我这样做时,在终端中会出现以下错误……”NoMethodError-未定义的方法“erb”表示“:”您的发送消息方法定义在哪里erb
是一种Sinatra方法,仅在该上下文中可用。我正在我的主应用程序文件“class AppControllerdef send_message
senders_name = params[:name]
senders_email = params[:email]
senders_message = params[:message]
html_body = erb :contact_form, locals: { senders_name: senders_name, senders_message: senders_message }
Mail.deliver do
to 'me@mywebsite.com'
from senders_name + " <" + senders_email + ">"
subject 'Email from contact form on Website'
# body senders_message
html_part do
content_type 'text/html; charset=UTF-8'
body html_body
end
end
end