如何发送主题带有特殊字符的电子邮件?

时间:2019-04-10 14:55:55

标签: php html

我发送电子邮件时,如果主题显示“Ç”,则显示“?”。

已经尝试实现:

-charset =“ ascii”;

-charset = UTF-8;

-$ mail-> $ subject =“ =?ISO-8859-1?Q?”。imap_8bit(“äöüßÄÖÜsollte hier gehen”)。“?=”;

-$ mail-> $ subject ='=?UTF-8?B?'。base64_encode(utf8_encode(“ççççç”))。'?=';

到目前为止,我无法解决此问题,我还能做什么?我已经在论坛上搜索过很多帖子,但都没有解决我的问题。

我的示例代码是:

$mail = new PHPMailer();
    $mail->charset="UTF-8";
    $mail->IsSMTP();
    $mail->Host = "*.*.*.*:*";
    $mail->SMTPAuth = false;
    $mail->From = "*@*.*";
    $mail->FromName = "newjob";  
    $mail->addAddress($add1, $addnome1);
    if($add2!=""){ $mail->addAddress($add2, $addnome2);};  
    if($add3!=""){ $mail->addAddress($add3, $addnome3);};  
    $mail->ContentType = 'text/calendar; charset=utf-8';
    $mail->$subject = "=?ISO-8859-1?Q?".imap_8bit("äöüßÄÖÜ")."?=";
    // $mail->$subject = '=?UTF-8?B?'.base64_encode(utf8_encode("çççç")).'?=';
    
    $ical = "BEGIN:VCALENDAR\r\n";
    $ical .= "VERSION:2.0\r\n";
    $ical .= "PRODID:-sigma.eda.pt\r\n";
    $ical .= "METHOD:PUBLISH\r\n";
    $ical .= "BEGIN:VEVENT\r\n";
    $ical .= "ORGANIZER;SENT-BY=\"MAILTO:$add1\r\n";
    $ical .= "ATTENDEE;CN=$add1;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=false:mailto:$add1\r\n";
    $ical .= "UID:".strtoupper(md5($event_id))."-sigma.eda.pt\r\n";
    $ical .= "SEQUENCE:".$sequence."\r\n";
    $ical .= "STATUS:".$status."\r\n";
    $ical .= "DTSTAMPTZID=Europe/azores:".date('Ymd').'T'.date('His')."\r\n";
    $ical .= "DTSTART:".$start."T".$start_time."\r\n";
    $ical .= "DTEND:".$end."T".$end_time."\r\n";
    $ical .= "LOCATION:".$venue."\r\n";
    $ical .= "SUMMARY:".$summary."\r\n";
    $ical .= "DESCRIPTION:".$descr."\r\n";
    $ical .= "RRULE:FREQ=MONTHLY;INTERVAL=".$rotina.";COUNT=".$repete.";\r\n";
    $ical .= "BEGIN:VALARM\r\n";
    $ical .= "TRIGGER:-PT15M\r\n";
    $ical .= "ACTION:DISPLAY\r\n";
    $ical .= "DESCRIPTION:Reminder\r\n";
    $ical .= "END:VALARM\r\n";
    $ical .= "END:VEVENT\r\n";
    $ical .= "END:VCALENDAR\r\n";
    $mail->Body = $ical;
      try {
       if ( !$mail->Send() ) {
        //  $error = "Unable to send the email <br />";
        //  throw new phpmailerAppException($error);
       } else {
        //  echo 'Message has been sent<br /><br />';
       }
     } catch (phpmailerAppException $e) {
      //  $errorMsg[] = $e->errorMessage();
     }

编辑 测试中的图片错误:

here

1 个答案:

答案 0 :(得分:3)

PHP具有区分大小写的类属性,这意味着当属性的名称为CharSet时,必须像这样定义它,而不是小写的$mail->charset。这也适用于$mail->$subject $mail->addAddress addAddress的情况是这样的。这是一个希腊文本示例,无需任何文本转换即可工作:

编辑

我已经在上面测试了此代码,并且可以正常工作:

$email = 'some@email.com';
$message =  'Όνομα: <br/>'.
    'eMail: <br/>'.
    'Τηλέφωνο: <br/>'.
    '(Ç, ç, äöüßÄÖÜ sollte hier gehen, açores)';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    $mail->isMail();
    $mail->addAddress($email);
    $mail->setFrom('test@email.com', 'Mailer');
    $mail->CharSet = PHPMailer::CHARSET_UTF8;
    $mail->Subject = "[ΣΥΜΜΕΤΟΧΗ] Νέα φόρμα δήλωσης συμμετοχής (Ç, ç, äöüßÄÖÜ sollte hier gehen, açores)";

    $mail->msgHTML($message);
    $mail->send();
    echo 'Message has been sent';
} catch(Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

这是收到的电子邮件的屏幕截图:

Result email screenshot