Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby HTML电子邮件模板中的Sinatra变量_Ruby_Email_Sinatra_Sendmail - Fatal编程技术网

Ruby HTML电子邮件模板中的Sinatra变量

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'

我有一份工作联系表寄到西纳特拉。我现在尝试使用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'
    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