我正在尝试使用电子邮件模板并在程序中使用它。我想使用程序变量和替换模板中的值。
如果我将其包含在heredoc的程序中,我就有了它的工作示例。但我希望将此作为模板保留在程序之外,以便我可以将其分发给其他人,以便他们可以自定义它。这意味着我试图使用程序中的变量从模板中替换#{tabcmd}和#{img}。
但是我收到了这个错误。我试着用它来逃避它,但没有发挥作用。 01:19:35 PM:异常被抓住:退出 错误消息:(eval):5:语法错误,意外的tIDENTIFIER,期待$ end
我甚至试过body1 = eval("\"#{body}\"")
。但它不起作用。我需要使用yaml或其他东西吗?
工作
def sendmessage(report_name, rep_desc, to_list, rcptList, subject_line, body, error_file_name, table_name_n, file_name_n , log_file)
##########################
# loop arround each image file and add it to the email.
##########################
imtg=""
#define global variable to loop arround each image file.
$party=""
file_name_n.each { |a| puts a
fname1 = "#{Base64.encode64(File.open(a, 'rb').read)}"
part4=<<EOF
Content-Type: image/png; name="#{a}"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="#{a}"
#{fname1}
--#{marker}
EOF
$party << part4
imtg <<"<IMG SRC=\"#{a}\" alt=\"#{a}\">"
puts imtg
}
tabnam = File.open(table_name_n, 'rb').read
puts tabnam
##########################
# Build email body
##########################
body = <<EOF
<html>
<head>
<title>Dashboards</title>
</head>
<body style="margin: 0px; padding: 0px; font-family: 'Trebuchet MS',verdana;">
<table width="100%" style="height: 100%;" cellpadding="4" cellspacing="0" border="0">
<tr>
<!-- ============ HEADER SECTION ============== -->
<td colspan="3" style="height: 100px;" bgcolor="#38424F" align="center"><h1><font size="3" color="white">#{report_name}</font></h1></td>
</tr>
#{tabcmd}
..
#{img}
...
EOF
不工作
##########################
# loop arround each image file and add it to the email.
##########################
imtg=""
#define global variable to loop arround each image file.
$party=""
file_name_n.each { |a| puts a
fname1 = "#{Base64.encode64(File.open(a, 'rb').read)}"
part4=<<EOF
Content-Type: image/png; name="#{a}"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="#{a}"
#{fname1}
--#{marker}
EOF
$party << part4
imtg <<"<IMG SRC=\"#{a}\" alt=\"#{a}\">"
puts imtg
}
tabnam = File.open(table_name_n, 'rb').read
puts tabnam
##########################
# Build email body
##########################
body = File.open(body, 'rb').read
puts body
... ... 这实际上将模板的内容放在下面。但是想要替换上面生成的“#{tabnam}”和“#{imtg}”。
<html>
<head>
<title>Dashboards</title>
</head>
<body style="margin: 0px; padding: 0px; font-family: 'Trebuchet MS',verdana;">
<table width="100%" style="height: 100%;" cellpadding="4" cellspacing="0" border="0">
<tr>
<!-- ============ HEADER SECTION ============== -->
<td colspan="3" style="height: 100px;" bgcolor="#38424F" align="center"><h1><font size="3" color="white">#{report_name}</font></h1></td>
</tr>
<table width="100%" align="center" border="0" cellspacing="0" cellpadding="5">
<tr>
<td width="50%" align="right">
#{tabnam}
</td>
<td width="50%" align="left">
<IMG SRC="data_chart.png" alt="data_chart.png">
</td>
</tr>
</table>
<!-- ============ MIDDLE COLUMN (CONTENT) ============== -->
<td width="100%" colspan="3" valign="top" bgcolor="#FBFCFF" align="center">
<!--#{tabnam}-->
#{imtg}
<br>
<br>
更新 - 解决方案: 在我玩它时找到了答案。我只需要使用gsub ...简单的解决方案。
body=body.gsub(/\#{tabnam}/, "#{tabnam}").gsub(/\#{imtg}/, "#{imtg}").gsub(/\#{report_name}/, "#{report_name}").gsub(/\#{rep_desc}/, "#{rep_desc}")
答案 0 :(得分:0)
更新:解决方案: 我在玩它时发现了。简单的gsub。
body=body.gsub(/\#{tabnam}/, "#{tabnam}").gsub(/\#{imtg}/, "#{imtg}").gsub(/\#{report_name}/, "#{report_name}").gsub(/\#{rep_desc}/, "#{rep_desc}")