Email 找不到ColdFusion发送邮件资源

Email 找不到ColdFusion发送邮件资源,email,coldfusion,Email,Coldfusion,我用coldfusion发送邮件,如下所示。但我发送的一些电子邮件被抛出,以下除外: <cfif !IsNull(SignatureDetails) && len(trim(SignatureDetails.getDigitalSignature()))> <!--- Embed digital signature if present via the local file system. ---> <cfset variables.

我用coldfusion发送邮件,如下所示。但我发送的一些电子邮件被抛出,以下除外:

<cfif !IsNull(SignatureDetails) && len(trim(SignatureDetails.getDigitalSignature()))>
    <!--- Embed digital signature if present via the local file system. --->
    <cfset variables.signatureUrl = '../../../urls/files/messages/spreadsheet/rows/columns/' & #SignatureDetails.getDigitalSignature()#>
    <cfmailparam file="#ExpandPath('#variables.signatureUrl#')#" contentid="digitalSignature" disposition="inline"/>
</cfif>
正确的路径应该是:C:\Data\URL\files\messages\spreadsheet\rows\columns\column.jpg


问题是,这只发生在发送的少数电子邮件上。目录是如上所述的硬编码,而签名的名称是从MyDB中的表中提取的

问题似乎是在这一行中使用了相对路径

<cfset variables.signatureUrl = '../../../urls/files/messages/spreadsheet/rows/columns/' & #SignatureDetails.getDigitalSignature()#>

根据所执行的页面,代码可能是从稍微不同的目录路径运行的,因此,向上3个目录可能不会给出您要查找的路径。当ColdFusion无法找到您定义的路径时,它会将已知路径附加到正在处理的文件所在的路径的末尾

您可以通过创建到签名(或附件目录)目录的映射(在Application.cfc中定义映射)并使用该映射添加签名来更正此问题

用于指向“签名”和命名“签名”的映射

<cfset variables.signatureUrl = '/columns/' & SignatureDetails.getDigitalSignature()>

用于指向“附件”和命名为“附件”的映射

<cfset variables.signatureUrl = '/rows/columns/' & SignatureDetails.getDigitalSignature()>


如果您需要有关在Application.cfc中创建映射的信息,请检查此项。

数据库中存在的文件名可能在服务器上没有该文件。另一个可能出错的问题是如何上载该目录中的文件。如果上载代码有bug,则可能会说您正在上载文件xyz.jpg,并将相同的名称存储在DB中,但由于xyz.jpg已经存在,因此会重命名该文件。虽然在这种情况下,它将是一些其他文件将被添加,而不是预期的一个。我与斯科特。。。看起来您的相对路径还需要一个“./”才能通过/sites/文件夹。我会选择一条绝对路径。按照Scot的建议设置一个映射,甚至是一个应用程序变量。是的,我调查了他的建议,这是罪魁祸首,为了解决这个问题,我改为使用绝对路径。谢谢你的帮助小心绝对路径。当您将此代码移动到服务器(您正在本地编码,对吗?)时,路径需要匹配。如果在Application.cfc中使用映射,则无需担心应用程序在服务器上的位置,但使用绝对路径时,则需要考虑。
<cfset variables.signatureUrl = '/rows/columns/' & SignatureDetails.getDigitalSignature()>