有没有办法在仅使用变量时为Coldfusion中的cfmail type = text电子邮件添加一些间距?

时间:2012-06-04 19:55:15

标签: coldfusion formatting cfmail

我对我的第一个 Cfmails 的看法有点敬畏。

问题是,我正在使用文本和内容的变量,我仍然希望有某种间距。

例如,如果我有:

<cfprocessingdirective suppresswhitespace="No">
    <cfmail
        TO="#Local.User.email#"
        FROM="..."
        SERVER="..."
        USERNAME="..."
        PASSWORD="..."
        WRAPTEXT="80"
        SUBJECT="#tx_automailer_register_subject# - #Local.User.Comp#">

#tx_automailer_default_hello#

#tx_automailer_register_info#

#tx_automailer_register_iln#:   #Local.User.iln#
#tx_firma#:                     #Local.User.firma#
#tx_ansprechpartner#:           #Local.User.ansprechpartner#
#tx_adresse#:                   #Local.User.adresse#
#tx_plz#:                       #Local.User.plz#
#tx_ort#:                       #Local.User.ort#
...

唯一看起来不错的地方是我的cfc :-)在邮件本身,一切都是火箭筒。

问题:
有没有办法解决这个问题?我也根据变量的长度尝试空间,但这也没有什么好处,我真的不喜欢为此做数学......

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

唯一的选择可能是对内容进行后期处理。在cfsavecontent中构建漂亮的内容,然后运行清理函数。

<cfprocessingdirective suppresswhitespace="No">
<cfsavecontent variable="message">
    #tx_automailer_default_hello#

    #tx_automailer_register_info#

    #tx_automailer_register_iln#:   #Local.User.iln#
    #tx_firma#:                     #Local.User.firma#
    #tx_ansprechpartner#:           #Local.User.ansprechpartner#
    #tx_adresse#:                   #Local.User.adresse#
    #tx_plz#:                       #Local.User.plz#
    #tx_ort#:                       #Local.User.ort#
</cfsavecontent>
<cfmail
    TO="#Local.User.email#"
    FROM="..."
    SERVER="..."
    USERNAME="..."
    PASSWORD="..."
    WRAPTEXT="80"
    SUBJECT="#tx_automailer_register_subject# - #Local.User.Comp#"
>#cleanupTextMessage(message)#</cfmail>

<cffunction name="cleanupTextMessage" output="false">
    <cfargument name="content" />
    <!--- remove whitespace at beginning of each line --->
    <cfset arguments.content = reReplace(arguments.content, "^\s+", "", "all") />
    <!--- replace any multiple whitespace characters with one space --->
    <cfset arguments.content = reReplace(arguments.content, "\s+", " ", "all") />
    <cfreturn arguments.content />
</cffunction>

您实际上可以将cfsavecontent嵌套在cfmail中,或者创建一个自定义标记来保存内容和函数操作。

注意:我在假设回答的问题是“如何在不影响结果文本消息的情况下使代码看起来很好”。如果您尝试使用生成的文本输出执行不同的操作,请告诉我。

答案 1 :(得分:2)

您可以使用HTML通过将TYPE =“html”添加到您的cfmail属性来实现。如果你想要那个sysprint类型,那么输入一个“pre”标签。如在

<pre>
#tx_automailer_default_hello#

#tx_automailer_register_info# 
....

</pre>

或者您可以添加表格,如下所示:

<table
<tr>
<td>#tx_automailer_default_hello#</td>
</tr>
<tr><td>

#tx_automailer_register_info#
</td>

如果你想坚持使用纯文本,你需要确保正确计算标签/空格,并确保你的所有行都不超过80个字符(或者它们将包裹......也不会超过节拍)。

答案 2 :(得分:1)

如果您设置了纯文本电子邮件并确信收件人将使用固定宽度的字体,则可以使用lJustify()将文字和打击垫与空格对齐。

  

左对齐指定长度的字符串中的字符。

#lJustify(tx_automailer_register_iln & ":",32)# #lJustify(Local.User.iln,25)#
#lJustify(tx_firma & ":",32)# #lJustify(Local.User.firma,25)#
#lJustify(tx_ansprechpartner & ":",32)# #lJustify(Local.User.ansprechpartner,25)#
#lJustify(tx_adresse & ":",32)# #lJustify(Local.User.adresse,25)#
#lJustify(tx_plz & ":",32)# #lJustify(Local.User.plz,25)#
#lJustify(tx_ort & ":",32)# #lJustify(Local.User.ort,25)#