从我在网上看到的例子看来,使用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>
答案 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>
我复制的代码是很久以前在一个带锁定计算机的环境中编写的。如果我再次这样做,我可能会使用隐藏的表单字段而不是会话变量。这些天他们更有可能意外地改变。
如果您正在为一般公众编码,请记住用户可能会更改其浏览器首选项以阻止新窗口打开。