PHP';s的邮件功能似乎可以删除换行符和制表符

PHP';s的邮件功能似乎可以删除换行符和制表符,php,email,newline,line-breaks,Php,Email,Newline,Line Breaks,我有一个助手类,用于通过PHP发送电子邮件: <?php class Mailsend { public $from; public $to; public $subject; public $message; public static function mail() { return new Mailsend(); } public function from($from) { $this-

我有一个助手类,用于通过PHP发送电子邮件:

<?php

class Mailsend {

    public $from;
    public $to;
    public $subject;
    public $message;

    public static function mail() {
        return new Mailsend();
    }

    public function from($from) {
        $this->from = $from;
        return $this;
    }

    public function fromName($fromName) {
        $this->fromName = $fromName;
        return $this;
    }

    public function to($to) {
        $this->to = $to;
        return $this;
    }

    public function subject($subject) {
        $this->subject = $subject;
        return $this;
    }

    public function message($message) {
        $this->message = $message;
        return $this;
    }

    public function send() {
        $mailFrom = $this->from;
        $mailFromName = $this->fromName;
        $mailTo = $this->to;
        $mailSubject = $this->subject;

        $mailSignature = "\n\n-- \n";
        $mailSignature .= "Vaš, Format.ba - Primjenjene Vještine.\n";
        $mailSignature .= "Za više informacija posjetite nas na: http://www.format.ba/\n";

        $mailBody = $this->message . "\n";
        $mailBody .= $mailSignature;

        $mailHeader = "From: $mailFromName <$mailFrom>\r\n";
        $mailHeader .= "MIME-Version: 1.0\r\n";
        $mailHeader .= "Content-type: text/html; charset=UTF-8\r\n";
        $mailHeader .= "Reply-To: $mailFromName <$mailFrom>\r\n";
        $mailHeader .= "X-Mailer: Mailsend.php\r\n";
        $mailHeader .= "X-Sender-IP: {$_SERVER['REMOTE_ADDR']}\r\n";
        $mailHeader .= "Bcc: $mailFromName <$mailFrom>\r\n";

        $mailParams = "-f$mailFrom";

        $mailBody = str_replace('  ', '', $mailBody);

        return mail($mailTo, $mailSubject, $mailBody, $mailHeader, $mailParams);
    }

    public function valid($email) {
        if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {
            return false;
        }
        $email_array = explode("@", $email);
        $local_array = explode(".", $email_array[0]);
        for ($i = 0; $i < sizeof($local_array); $i++) {
            if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
                return false;
            }
        }
        if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) {
            $domain_array = explode(".", $email_array[1]);
            if (sizeof($domain_array) < 2) {
                return false;
            }
            for ($i = 0; $i < sizeof($domain_array); $i++) {
                if (!preg_match("/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/", $domain_array[$i])) {
                    return false;
                }
            }
        }

        return true;
    }

}
正如你在这个例子中看到的,有很多空格是由“空格”缩进的,而不是制表符

当我将该消息发送到我的一封电子邮件时,我得到以下输出:

您好,兹拉坦欢迎访问我们的网站Domain.tdl。你现在可以 使用我们在这里提供的所有服务。访问:www.domain.tdl- 有关我们服务的更多信息和新闻!欢迎

它只是以某种方式剥离了所有的换行符和两个以上的长度空白,并将它们合并在一起,所以我失去了最初的电子邮件格式

我认为,
Mailsend
中的这一行可能会导致以下问题:

$mailBody = str_replace('  ', '', $mailBody);
但事实并非如此,到目前为止,我还没有找到任何原因来解释为什么会发生这种情况,也无法阻止这种情况继续下去


有人有过类似的经历吗?是否可能我自己的代码中缺少了某些内容?

将其与

$message = "Hello, " . $model->fullname . "<br>,

                    Welcome to our Website, Domain.tdl. You are now able to use all of our services which we provide here.<br>

                    Visit: www.domain.tdl - for more information and news about our services!<br>

                    Greets!";
$message=“你好”$型号->全名。“
, 欢迎访问我们的网站Domain.tdl。您现在可以使用我们在这里提供的所有服务。
访问:www.domain.tdl-有关我们服务的更多信息和新闻!
“欢迎!”;
将其与

$message = "Hello, " . $model->fullname . "<br>,

                    Welcome to our Website, Domain.tdl. You are now able to use all of our services which we provide here.<br>

                    Visit: www.domain.tdl - for more information and news about our services!<br>

                    Greets!";
$message=“你好”$模型->全名。“
, 欢迎访问我们的网站Domain.tdl。您现在可以使用我们在这里提供的所有服务。
访问:www.domain.tdl-有关我们服务的更多信息和新闻!
“欢迎!”;
使用

而不是
\r\n

添加此标题以使您的内容具有HTML格式:

Content-type: text/html; charset=UTF-8

要插入选项卡时,请使用多个

使用

而不是
\r\n

添加此标题以使您的内容具有HTML格式:

Content-type: text/html; charset=UTF-8

要插入选项卡时,请使用多个

您使用的标题如下:

$mailHeader .= "Content-type: text/html; charset=UTF-8\r\n";
但我们将要发送纯文本电子邮件。换成

$mailHeader .= "Content-type: text/plain; charset=UTF-8\r\n";

或者将您的电子邮件格式化为html,您使用的标题如下:

$mailHeader .= "Content-type: text/html; charset=UTF-8\r\n";
但我们将要发送纯文本电子邮件。换成

$mailHeader .= "Content-type: text/plain; charset=UTF-8\r\n";

或者将您的电子邮件格式化为html

,是的。。。在任何人将此标记为可能的副本之前。。。我在STO上找到的答案中,没有一个是针对同一个问题的,对我没有帮助!不,它不会移除它。但是你假设客户会尊重这些标签和空格(这是错误的)你如何阅读电子邮件?是你的邮件阅读器导致了这个问题吗?@zerkms相信我,这不是我目前最大的问题:)我想解决这个问题,我在这个问题中详细解释了这个问题!:)@兹拉坦·奥:我再重复一遍:
mail()
没有任何条纹,空格和制表符都在电子邮件中。但html客户端确实将多个空格折叠成一个空格。。。在任何人将此标记为可能的副本之前。。。我在STO上找到的答案中,没有一个是针对同一个问题的,对我没有帮助!不,它不会移除它。但是你假设客户会尊重这些标签和空格(这是错误的)你如何阅读电子邮件?是你的邮件阅读器导致了这个问题吗?@zerkms相信我,这不是我目前最大的问题:)我想解决这个问题,我在这个问题中详细解释了这个问题!:)@兹拉坦·奥:我再重复一遍:
mail()
没有任何条纹,空格和制表符都在电子邮件中。但html客户端确实将多个空格折叠为一个空格。我是否应该修改邮件函数的标题?@ZlatanO。不,没有必要。我真傻!直到现在,我还没有注意到这是text/html输出格式!nl2br:)真的变魔术了!谢谢你的指导!我会在2-3分钟内接受你的回答!我应该修改邮件功能的标题吗?@ZlatanO。不,没有必要。我真傻!直到现在,我还没有注意到这是text/html输出格式!nl2br:)真的变魔术了!谢谢你的指导!我会在2-3分钟内接受你的回答!