6

The following javascript code successfully sends an email message via the Gmail API. However the table formatting, specifically the table and column (cell) width settings, seem to be ignored.

function sendMail(email) {
    var to = email;
    var subject = "HTML formatted email";
    var content = "";
    content += "<html><body>";
    content += "<table width='100%'><tr><td>"; // Outer table
    content += "<table width='60%'>"; // Nested table
    content += "<tr><td width='70%'>This is a row</td><td width='30%'>999999</td></tr>";
    content += "<tr><td width='70%'>So is this</td><td width='30%'>9999</td></tr>";
    content += "</table>";
    content += "</td></tr></table>";
    content += "</body></html>";
    var email =
            "From: 'me'\r\n" +
            "To: " + to + "\r\n" +
            "Subject: " + subject + "\r\n" +
            "Content-Type: text/html; charset=utf-8\r\n" +
            "Content-Transfer-Encoding: quoted-printable\r\n\r\n" +
            content;
    var base64EncodedEmail = window.btoa(email).replace(/\+/g, "-").replace(/\//g, "_");
    var request = gapi.client.gmail.users.messages.send({
        "userId": "me",
        "resource": {
            "raw": base64EncodedEmail
        }
    });
    request.execute();
}

The email message looks as follows:

This is a row 999999
So is this    9999

Everything I've researched on sending HTML formatted email messages says to use nested tables and inline styling. Why is my width styling not working?

1
  • Try removing the % sign. width='400' should do the trick. Commented Feb 10, 2017 at 18:58

1 Answer 1

12

After much searching, experimentation and testing I finally figured out that I needed to set the content-transfer-encoding value to base64:

var email =
        "From: 'me'\r\n" +
        "To: " + to + "\r\n" +
        "Subject: " + subject + "\r\n" +
        "Content-Type: text/html; charset='UTF-8'\r\n" +
        "Content-Transfer-Encoding: base64\r\n\r\n" +
        "<html><body>" +
        content +
        "</body></html>";

Hope this saves others with similar question some time.

Sign up to request clarification or add additional context in comments.

2 Comments

content-transfer-encoding change worked for me..and saved my day
wow, my hero, saved me lots, did u also try adding attachments? that's my next blocker

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.