使用Cfmail时可以在发送之前看到电子邮件吗?

时间:2014-05-01 04:50:21

标签: coldfusion coldfusion-9

从我在网上看到的例子看来,使用cfmail只是为了自动发送电子邮件。 在将电子邮件发送给收件人之前,是否可以看到电子邮件HTML文本? 换句话说,我可以更改'TO:'电子邮件部分。 这可能,或者cfmail只能自动发送电子邮件吗?

cfm文件的示例代码:

<cfquery....>
select ...
</cfquery>

<cfmail query="test"
to=""
from="mail@mail.com"
.....
type="html">
here is test
<cfoutput>
<p>#data</p>
</cfouput>
</cfmail>

2 个答案:

答案 0 :(得分:3)

我会做这样的事情。

 <cfquery....>
select ...
</cfquery>

<!--- Save your content to a variable --->
<cfsavecontent variable="content">
    here is test
    <cfoutput>
    <p>#data#</p>
    </cfouput>

</cfsavecontent>

<!--- Output that content into a div so the user can see it--->
<div id="email-content">
    <cfoutput>#content#</cfouput>
</div>
<button onclick="sendEmail()">send</button>

<!--- When the user clicks send call a JS function --->
<!--- Use ajax to call a send function and use your email content --->

<script type="text/javascript">
    function sendEmail()
    {
        var emailContent = $('#email-content').html();

        $.ajax({
          type: 'POST',
          url: "yourCFCfileToSendEmail?method=sendEmail&content=" + emailContent ,
          success: function(){
                console.log("email sent");
          }
        });
    }
</script>





<!--- An example of what your email function would look like in the cfc .  --->
<cffunction name="sendEmail" access="remote" returntype="string" returnformat="plain">
        <cfargument name="toEmail" type="string" required="true">
        <cfargument name="fromEmail" type="string" required="true">
        <cfargument name="subject" type="string" required="true">
        <cfargument name="content" type="string" required="true">
        <cfargument name="replyTo" type="string" required="false">

        <cfset attributes = decodeParams(params)>

        <cfparam name="arguments.replyTo" default="#arguments.fromEmail#">
        <cfif NOT Len(Trim(arguments.replyTo))>
            <cfset arguments.replyTo = arguments.fromEmail>
        </cfif>

        <cfmail to="#arguments.toEmail#"
                from="#arguments.fromEmail#"
                subject="#arguments.subject#"
                replyto="#arguments.replyTo#"
                type="html">

            <h1>#arguments.subject#</h1>
            #content#


        </cfmail> 
</cffunction>

我没有测试过这个。这需要一些调整,但应该指向正确的方向。

答案 1 :(得分:2)

这个答案与威尔非常相似。它可以用更少的代码完成工作。

假设用户提交表单,请从以下开始:

 session.mailto = form.mailto;
 session.mailfrom = form.mailfrom;

然后这样做:

<cfsavecontent variable = "session.mailbody">
code
</cfsavecontent>

向用户提出:

<a href="javascript:void(0)" 
onclick="Emailwin=window.open('SendMail.cfm','thewin', 
'width=500,height=500,left=30,top=30');">
<button type="button">Send Mail </button>

SendMail.cfm如下所示:

<cfmail to="#session.mailto#" from="#session.mailfrom#" 
subject = "something" type="html">
#session.mailbody#
</cfmail> 

<h3>Your mail has been sent.  This window will close in 2 seconds.</h3>
<script language="javascript">
winClose=window.setTimeout("window.close()",2000);
</script>

我复制的代码是很久以前在一个带锁定计算机的环境中编写的。如果我再次这样做,我可能会使用隐藏的表单字段而不是会话变量。这些天他们更有可能意外地改变。

如果您正在为一般公众编码,请记住用户可能会更改其浏览器首选项以阻止新窗口打开。