Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Cfmail is inserting a blank space in front of my email body

New Here ,
Dec 03, 2013 Dec 03, 2013

When I send a text formatted email using CFMail, Coldfusion 10, I am seeing an extra blank space at the beginning of the message body.  When I capture the .cfmail file from my spool directory, it looks like this in part:

bcc:  dale@realgo.com

replyto:  dale@realgo.com

subject:  2 listings

X-Mailer:  ColdFusion 10 Application Server

List-Unsubscribe:  <http://overlord.dev.realgo.com/go/B3ANTR4IHSUB>

X-Receiver:  dale@realgo.com,dale@realgo.com

MIME-Version:  1.0

Content-Transfer-Encoding:  7bit

body:   $Prospective Buyer,

body: 

body:  RealGo, Inc.

body: 

body: 

body:  For a detailed view of these listings including all photos, visit this link

body: 

body:  Residential-Detached Listings

body: 

body:  SRC   MLS #  PRICE $       BD   BA   SQFT  LOCALE                   STAT ADDRESS

body:  IRES  722659 LP900,000     3    3    1948  Boulder                  A    593 Lee Hill Dr

body:  ------------------------Total Residential-Detached Listings: 1

Note that there are 2 spaces between "body:" and the text for that line, but on the first line there are 3 spaces.

The "$" is on that line as a check to make sure my message body didn't itself have the extra space, it was generated by

<cfset EmailBody = "$#EmailBody#">

My cfmail is coded as follows:

<cfmail

    to = "#Attributes.To#"

    from = "#Attributes.From#"

    cc = "#Attributes.CC#"

    bcc = "#Attributes.BCC#"

    replyTo = "#Attributes.Reply_To#"

    subject = "#Attributes.Subject#"

    type = "text"

    charset="us-ascii">

    <cfif "#Attributes.EmailUnsubscribeLink#" NEQ "">

        <cfmailparam name="List-Unsubscribe" value ="<#Attributes.EmailUnsubscribeLink#>">

    </cfif>

    <cfmailparam name="X-Receiver" value="#xReceivers#">

    <cfmailparam name="MIME-Version" value="1.0">

    <cfmailparam name="Content-Transfer-Encoding" value="7bit">

    #EmailBody#

</cfmail>

I have tried this with all the whitespace collapsed, to no effect.  Any ideas on what might be causing this extra space to appear?

Thanks,

dtwineham

1.6K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Dec 03, 2013 Dec 03, 2013

If your code is exactly as shown above, the issue is your code/tag formatting. Notice there is at least one space before the #EmailBody#. I'm kind of surprised you don't also have an extra CR/LF as well. For kicks, try removing the CR/LF and all whitespace from the end of the last tag and the emailBody:

    <cfmailparam name="Content-Transfer-Encoding" value="7bit">#EmailBody#

Dealing with whitspace is a royal pain.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Dec 03, 2013 Dec 03, 2013

Steve, thanks for the quick response.

I have tried that, even putting that whole code segment on a single line with no spaces outside of a tag. .  It turns out that if you put a literal string in for the message body, it does include any leading white space.  But if all that ColdFusion encounters is a variable, you can have any number of spaces there and only the text in your variable comes out.  (Except for my phantom 1 leading space).

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Advocate ,
Dec 03, 2013 Dec 03, 2013

While ugly, I'm certain the following will work:

<cfmail

to = "#Attributes.To#"

from = "#Attributes.From#"

cc = "#Attributes.CC#"

bcc = "#Attributes.BCC#"

replyTo = "#Attributes.Reply_To#"

subject = "#Attributes.Subject#"

type = "text"

charset="us-ascii"><cfif "#Attributes.EmailUnsubscribeLink#" NEQ ""><cfmailparam name="List-Unsubscribe" value ="<#Attributes.EmailUnsubscribeLink#>"></cfif><cfmailparam name="X-Receiver" value="#xReceivers#"><cfmailparam name="MIME-Version" value="1.0"><cfmailparam name="Content-Transfer-Encoding" value="7bit">#Trim(EmailBody)#</cfmail>

I've had problems in the past where the cfif tag leaves whitespace behind when the conditional logic evaluates as false. Placing the entire tag through the close tag seems to correct it.

Also notice that I wrapped EmailBody with a Trim().

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Dec 03, 2013 Dec 03, 2013

Awesome, that works.  I vaguely recall seeing that <cfif> quirk at some time years ago it was so far back that it didn't even occur to me this time. I did try something a little different and put the message body in before any of the <cfmailparam> tags and that also does the trick, even though it doesn't look quite right.  At least it will be a little easier to maintain.  Either way, it is gonna need a heck of a comment.

Didn't need the trim, I was already doing that when I set the value of the variable for the content.

Thanks again.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 04, 2013 Dec 04, 2013

This article might help you:

http://duncan99.wordpress.com/2009/01/15/cfmail-whitespace-trick/

In short this might strip out that leading whitespace for you:

<cfmail

    to = "#Attributes.To#"

    from = "#Attributes.From#"

    cc = "#Attributes.CC#"

    bcc = "#Attributes.BCC#"

    replyTo = "#Attributes.Reply_To#"

    subject = "#Attributes.Subject#"

    type = "text"

    charset="us-ascii">

    <cfif "#Attributes.EmailUnsubscribeLink#" NEQ "">

        <cfmailparam name="List-Unsubscribe" value ="<#Attributes.EmailUnsubscribeLink#>">

    </cfif>

    <cfmailparam name="X-Receiver" value="#xReceivers#">

    <cfmailparam name="MIME-Version" value="1.0">

    <cfmailparam name="Content-Transfer-Encoding" value="7bit">

    #Chr(0)##EmailBody##Chr(13)#

</cfmail>

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Dec 04, 2013 Dec 04, 2013
LATEST

Thanks, Duncan.

I had seen and tried that trick but no luck.  It appears that if the body of the email is a string literal or even just starts with one (or from your example, includes one between variables), it preserves any whitespace you might have put in for code formatting.  But if the only thing in the body is a variable name, only the value of that variable is inserted, none of the preceeding whitespace. So

     #Chr(0)#Hello World#Chr(13)#

would be useful for eliminating the leading whitespace, but

     #Chr(0)##variableName##Chr(13)#

doesn't have any effect because the leading whitespace was not included in the first place.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources