2017-03-31 96 views
0

你好我想創建一個方法來通過我的qt應用程序發送電子郵件,它的工作非常好,但是當我嘗試發送非英語消息的阿拉伯語時,它發送爲「????」問號 這裏是我的代碼發送電子郵件與Qt

void Smtp::sendMail(const QString &from, const QString &to, const QString &subject, const QString &body) 
{ 
    message.append("User-Agent: Mozilla Thunderbird 1.0.6 (Macintosh/20050716)\n"); 
    message.append("X-Accept-Language: ar_EG, en_US\n"); 
    message.append("MIME-Version: 1.0\r\n"); 
    message = "To: " + to + "\r\n"; 
    message.append("From: " + from + "\r\n"); 
    message.append("Subject: " + subject + "\r\n"); 
    //message.append("Content-Type: text/html; charset=UTF8;\r\n"); 
    message.append("Message From Smart Clinic\r\n"); 
    message.append(QString("Build Number: %1 \r\n").arg(BUILD)); 
    message.append(QString("Version  : %1 \r\n").arg(APPVERSION)); 
    message.append(body); 
    message.replace(QString::fromLatin1("\n"), QString::fromLatin1("\r\n")); 
    message.replace(QString::fromLatin1("\r\n.\r\n"),QString::fromLatin1("\r\n..\r\n")); 

    this->from = from; 
    rcpt = to; 
    state = Init; 
    socket->connectToHostEncrypted(host, port); //"smtp.gmail.com" and 465 for gmail TLS 
    if (!socket->waitForConnected(timeout)) { 
     emit status(tr("Failed to send message")); 
    } 

    t = new QTextStream(socket); 
} 

如何使它能夠發送英語和非英語文本 謝謝

回答

1

你的消息被轉換在8位陣列爲ASCII(如Latin1的)。你應該使用UTF8編碼。 你的代碼看起來像不完整的 - 一些沒有聲明的變量。所以很難說在哪裏完全消息轉換爲字節

0

在您的代碼中取消註釋以下行並嘗試。

//message.append("Content-Type: text/html; charset=UTF8;\r\n"); 

如果不嘗試使用的字符集類型 「ISO_8859-7:1987年」,並檢查其是否工作,

message.append("Content-Type: text/html; charset=ISO_8859-7:1987;\r\n"); 

更多的字符集是指

http://www.iana.org/assignments/character-sets/character-sets.xhtml

0

通過設置 「內容類型:文本/純文本; 和 設置編解碼器在 Q TextStream t; t.setcodec(「UTF-8」「);