Exemplo n.º 1
0
UtlString MailMessage::FormatForSending()
{
    unsigned int i;
    int lineLength = 4;

    // From: "Name" <Address>
    UtlString data = "From: " + m_From.toString() + CRLF;

    // To: "Name" <Address>, "Name" <Address>
    data += "To: ";
    for (i = 0; i < m_vecTo.size(); i++)
    {
        if (lineLength + m_vecTo[i].toString().length() > 998)
        {
            data += "\r\n ";
            lineLength = 1;
        }

        data += m_vecTo[i].toString();
        lineLength += m_vecTo[i].toString().length();

        if (i < m_vecTo.size()-1)
        {
            data += ", ";
            lineLength += 2;
        }
    }
    data += CRLF;
    
    // Cc: "Name" <Address>, "Name" <Address>
    data += "Cc: ";
    for (i = 0; i < m_vecCc.size(); i++)
    {
        if (lineLength + m_vecCc[i].toString().length() > 998)
        {
            data += "\r\n ";
            lineLength = 1;
        }

        data += m_vecCc[i].toString();
        lineLength += m_vecCc[i].toString().length();

        if (i < m_vecCc.size()-1)
        {
            data += ", ";
            lineLength += 2;
        }
    }
    data += CRLF;
    
    // Subject: Subject text
    data += "Subject: " + m_Subject + CRLF;

    // Date: Mon, 25 Sep 2001 11:11:11 -0600\r\n
    UtlString dateString;
    OsDateTime now;
    OsDateTime::getCurTime(now);
    now.getHttpTimeString(dateString);
/*
    SYSTEMTIME now; GetLocalTime(&now);
    TIME_ZONE_INFORMATION tzinfo; GetTimeZoneInformation(&tzinfo);
    char *day[] = { "Sun","Mon","Tue","Wed","Thu","Fri","Sat" };
    char *month[] = { "Jan","Feb","Mar","Apr","May","Jun","Jul",
                      "Aug","Sep","Oct","Nov","Dec" };
    char buf[128];
    wsprintf(buf, "Date: %s, %u %s %u %02u:%02u:%02u %c%02u%02u",
        day[now.wDayOfWeek],
        now.wDay,
        month[now.wMonth],
        now.wYear,
        now.wHour,
        now.wMinute,
        now.wSecond,
        tzinfo.Bias > 0 ? '-' : '+',
        abs(tzinfo.Bias/60),
        abs(tzinfo.Bias%60));
*/
    char buf[128];
    sprintf(buf, "Date: %s",dateString.data());

    data += buf + CRLF;

    // MIME version header
    data += "Mime-Version: 1.0" + CRLF;

    // If attachments...
    if (m_vecAttachment.size() > 0)
    {
        UtlString boundary = "---=_Next_Part_of_Message_987456321147852369";

        // MIME content type header and separator line
        data += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\""
                + CRLFCRLF;

        // Message body
        data += "--" + boundary + CRLF;
        data += "Content-Type: " + m_ContentType + CRLF;
        data += "Content-Transfer-Encoding: quoted-printable" + CRLFCRLF;
        data += m_Body + CRLF;

        // Attachments
        for (int i = 0; i < ((int)(m_vecAttachment.size())); i++)
        {
            data += "--" + boundary + CRLF;
            data += "Content-Type: " + m_vecAttachment[i].MIMEtype()
                    + "; name=\"" + m_vecAttachment[i].Filename() + "\"" + CRLF;
            data += "Content-Transfer-Encoding: base64" + CRLF;
            data += "Content-Disposition: attachment; filename=\""
                    + m_vecAttachment[i].Filename() + "\"" + CRLFCRLF;
            data += m_vecAttachment[i].Base64Data() + CRLF;
        }
        data += "--" + boundary + "--";
    }
    // No attachments
    else
    {
        // MIME content type header
        data += "Content-Type: " + m_ContentType + CRLF;

        // Separator line, body
        data += CRLF + m_Body;
    }
    data += CRLF + ".";
    data += CRLF;
    return data;
}