首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPMailer BCC销毁格式

PHPMailer BCC销毁格式
EN

Stack Overflow用户
提问于 2017-04-27 09:37:05
回答 1查看 206关注 0票数 1

我最近更新了我们古老的电子邮件功能到PHPMailer。一切都很完美,但现在我对密件有了问题。当我添加一个或多个附件时

代码语言:javascript
复制
$mail->AddBCC($arr["bcc"]);

电子邮件格式被销毁。电子邮件看起来会是这样:

代码语言:javascript
复制
This is a multi-part message in MIME format. 

--b1_49abaa950e1203ed180ed1d5471145f7 
Content-Type: text/plain; charset=iso-8859-1 
Content-Transfer-Encoding: 8bit 

添加自定义标头也不起作用,因为这样我就得到了错误

代码语言:javascript
复制
Could not instantiate mail function.

如果不破坏电子邮件格式,密件抄送就能正常工作。

编辑:

这是发送电子邮件的整个功能。

代码语言:javascript
复制
$adressen=mail_get_adressen_name();
if(!isset($arr["send_to"]))
{
    return array("fehler"=>"Kein Empfänger angegeben");
}
if(!isset($arr["subject"]))
{
    $arr["subject"]="";
}
if(!isset($arr["from"]))
{
    return array("fehler"=>"Kein Absender angegeben");
}
if(!isset($arr["disposition"]))
{
    $arr["disposition"]=false;
}
if(!isset($arr["message"]))
{
    $arr["message"]="";
}
if(!isset($arr["message_nohtml"]) or $arr["message_nohtml"]=="")
{
    $arr["message_nohtml"]=strip_tags(str_ireplace(array("<br />","<br>","<br/>","<li>"), "\r\n", $arr["message"]));
}
if(!isset($arr["cc"]))
{
    $arr["cc"]="";
}
else
{
    if(trim($arr["cc"])!="")
    {
        if(!stristr($arr["cc"],"@") && strlen($arr["cc"])<4)
        {
            $arr["cc"].="@.......";
        }
    }
}
if(!isset($arr["bcc"]))
{
    $arr["bcc"]="";
}
else
{
    if(trim($arr["bcc"])!="")
    {
        if(!stristr($arr["bcc"],"@") && strlen($arr["bcc"])<4)
        {
            $arr["bcc"].="@......";
        }
    }
}
if(!stristr($arr["send_to"],"@") && strlen($arr["send_to"])<4)
{
    $arr["send_to"].="@.......";
}
if(!stristr($arr["from"],"@") && strlen($arr["from"])<4)
{
    $arr["from"].="@.........";
}
$anhang=cache_get(HR_USER,$window,"MAIL_ANHANG",$arr);
$arr["message"]=convert_text_to_utf8($arr["message"]);
$arr["message_nohtml"]=convert_text_to_utf8($arr["message_nohtml"]);
$arr["subject"]=convert_text_to_utf8($arr["subject"]);
$arr["message"]=iconv("UTF-8","Windows-1252",$arr["message"]);
$arr["message_nohtml"]=iconv("UTF-8","Windows-1252",$arr["message_nohtml"]);
$arr["subject"]=iconv("UTF-8","Windows-1252",$arr["subject"]);
$mail = new PHPMailer;
if(isset($adressen[strtolower($arr["from"])]))
{
    $mail->setFrom($arr["from"],iconv("UTF-8","Windows-1252",convert_text_to_utf8($adressen[strtolower($arr["from"])])));
}
else
{
    $mail->setFrom($arr["from"]);
}
if(stristr($arr["send_to"],","))
{
    $arr2=explode(",",$arr["send_to"]);
    foreach($arr2 as $val)
    {
        if(isset($adressen[strtolower($val)]))
        {
            $mail->addAddress($val,iconv("UTF-8","Windows-1252",convert_text_to_utf8($adressen[strtolower($val)])));
        }
        else 
        {
            $mail->addAddress($val);
        }
    }
}
else
{
    if(isset($adressen[strtolower($arr["send_to"])]))
    {
        $mail->addAddress($arr["send_to"],iconv("UTF-8","Windows-1252",convert_text_to_utf8($adressen[strtolower($arr["send_to"])])));
    }
    else
    {
        $mail->addAddress($arr["send_to"]);
    }
}
if($arr["cc"]!="")
{
    if(stristr($arr["cc"],","))
    {
        $arr2=explode(",",$arr["cc"]);
        foreach($arr2 as $val)
        {
            if(isset($adressen[strtolower($val)]))
            {
                $mail->AddCC($val,iconv("UTF-8","Windows-1252",convert_text_to_utf8($adressen[strtolower($val)])));
            }
            else
            {
                $mail->AddCC($val);
            }
        }
    }
    else
    {
        if(isset($adressen[strtolower($arr["cc"])]))
        {
            $mail->AddCC($arr["cc"],iconv("UTF-8","Windows-1252",convert_text_to_utf8($adressen[strtolower($arr["cc"])])));
        }
        else
        {
            $mail->AddCC($arr["cc"]);
        }
    }
}
if(trim($arr["bcc"])!="" and HR_USER=="add")
{
    $mail->AddBCC($arr["bcc"]);
}
if(isset($adressen[strtolower($arr["from"])]))
{
    $mail->addReplyTo($arr["from"],iconv("UTF-8","Windows-1252",convert_text_to_utf8($adressen[strtolower($arr["from"])])));
}
else
{
    $mail->addReplyTo($arr["from"]);
}

$mail->isHTML(true);

$mail->Subject = $arr["subject"];
$mail->Body    = $arr["message"];
$mail->AltBody = $arr["message_nohtml"];

if($arr["disposition"])
{
    $mail->ConfirmReadingTo = $arr["from"];
}
if(is_array($anhang))
{
    foreach($anhang as $val)
    {
        $mail->addAttachment($val["pfad"],$val["name"]);
    }
}
if($mail->send())
{
    return array("fehler"=>"");
}
else
{
    err($mail->ErrorInfo);
    return array("fehler"=>"Mail versand fehlgeschlagen. Bitte melden Sie sich bei der EDV.<br>".$mail->ErrorInfo);
}

当我在没有密件抄送的情况下发送电子邮件时,它看起来如下(我不得不删除一些文本):

代码语言:javascript
复制
Für Sie wurde ein Vorgang zu Auftrag 11EDV erstellt.
Vorgang öffnen

Kategorie:
EDV Entwicklung

Vorgangs-Bemerkung:
Gibt es eine Möglichkeit, eine E-Mail mit einer Auftragsbestätigung als Anhang direkt im HIS als Auftragsbestätigung hochzuladen?
Momentan müssen wir die PDF ja auf dem PC zwischenspeichern und dann im HIS als Event Anhang hochladen.

letzte Event-Bemerkung von hoj:
Anregung von ....some name....


.......some footer.....

当我添加一个或多个密件抄送器时,相同的电子邮件如下所示:

代码语言:javascript
复制
Planung (intern) (EDV Entwicklung) Dokumentnummer: 11EDV - 75, BVNR: 71122
.....my email adress......
27.04.2017 11:24
An: .....my email adress......,
This is a multi-part message in MIME format. 

--b1_49abaa950e1203ed180ed1d5471145f7 
Content-Type: text/plain; charset=iso-8859-1 
Content-Transfer-Encoding: 8bit 

Für Sie wurde ein Vorgang zu Auftrag 11EDV erstellt. 
Vorgang öffnen 

Kategorie: 
EDV Entwicklung 

Vorgangs-Bemerkung: 
Gibt es eine Möglichkeit, eine E-Mail mit einer Auftragsbestätigung als Anhang direkt im HIS als Auftragsbestätigung hochzuladen? 

Momentan müssen wir die PDF ja auf dem PC zwischenspeichern und dann im HIS als Event Anhang hochladen. 

letzte Event-Bemerkung von hoj: 
Anregung von ....some name.... 


......footer.......


--b1_49abaa950e1203ed180ed1d5471145f7 
Content-Type: text/html; charset=iso-8859-1 
Content-Transfer-Encoding: 8bit 

Für Sie wurde ein Vorgang zu Auftrag 11EDV erstellt.<br> <b>Vorgang öffnen</b></a><br><br>Kategorie:<br>EDV Entwicklung<br><br>Vorgangs-Bemerkung:<br>Gibt es eine Möglichkeit, eine E-Mail mit einer Auftragsbestätigung als Anhang direkt im HIS als Auftragsbestätigung hochzuladen?<br /> 
Momentan müssen wir die PDF ja auf dem PC zwischenspeichern und dann im HIS als Event Anhang hochladen.<br><br>letzte Event-Bemerkung von <b>hoj</b>:<br>Anregung von ....some name....<br>


......footer.......

--b1_49abaa950e1203ed180ed1d5471145f7-- 

我希望我现在的意思是清楚了。我知道不能显示BCC,因为电子邮件服务器删除了它们。这不是我想要的。我只是想知道为什么电子邮件将显示为源代码而不是普通的电子邮件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-28 06:43:38

我看到了一些问题。我认为主要的问题是,您试图发送Windows1252编码的数据,但您的电子邮件头说,您有8位ISO-8859-1编码在邮件正文。正如您在维基百科中可能发现的那样,ISO8859-1和Windows1252是不一样的.大多数字符是相同的,但Windows1252是高级ISO-8859-1字符集.这可能会毁了你所有的电子邮件。所以,请决定,你想用哪一个。我建议您选择ISO-8859-1而不是Windows-1252编码,因为这通常用于旧的8位电子邮件。

而且,大部分数据似乎来自HTML表单。如果是这样,可以简单地将form元素中的form属性设置为ISO-8859-1。因此,换句话说:让客户为你做艰苦的工作。但是,也请在PHP后端验证它,客户端向您发送真正的ISO-8859-1编码表单数据和其他内容。因为你不能相信任何客户。

另一个原因可能是,您首先将未知编码转换为UTF-8,然后从UTF-8转换回Windows-1252,这也会导致一些问题。iconv可以在一步内为您处理这一问题(我将从代码示例的顶部取第一条找到的行作为示例):

代码语言:javascript
复制
mail->addReplyTo($arr['from'], iconv(mb_detect_encoding($adressen[strtolower($arr['from'])]),'Windows-1252', $adressen[strtolower($arr['from'])]));

请注意,上面的行需要php mbstring扩展。您已经选择了正确的iconv作为您的转换函数,因为这个函数是专门为电子邮件编码转换而设计的,并且为了其他目的,我们得到了mbstring。但是iconv功能非常有限,因此您需要一个mbstring函数来检测字符串上给定的编码。

到目前为止,我发现的另一个优化提示:

  1. 没有必要使用双引号,因为它里面没有表达式。所以你可以在更快的运行时使用单引号和效应。也许在这个小功能中感觉不到更快,但是在巨大的应用中,它要快得多。而且它也更安全,因为您阻止PHP计算表达式,这可能是客户端绕过的。
  2. 您也可以使用类型安全比较。因此,对于字符串比较,使用$string === 'test'而不是$string == 'test
  3. 使用PSR标准日志来处理错误,它实现了PSRLoggerInterface,如单色。这越来越成为行业事实上的标准.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43654050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档