PHPMailer的发件人显示为Root用户

6
我正在使用PHP Mailer发送邮件,同时使用SMTP。
以下是我使用的代码:
$email = new PHPMailer();

            $email->IsSMTP(); // telling the class to use SMTP
            $email->Host       = "mail.integradigital.co.uk"; // SMTP server
            $email->SMTPDebug  = 2; // enables SMTP debug information (for testing)
                                                       // 1 = errors and messages
                                                       // 2 = messages only
            $email->SMTPAuth   = true;  // enable SMTP authentication
            $email->Host       = "mail.integradigital.co.uk"; // sets the SMTP server
            $email->Port       = 26;    // set the SMTP port for the GMAIL server
            $email->Username   = "sending@************.co.uk"; // SMTP account username
            $email->Password   = "********";        // SMTP account password

            $email->SetFrom($result["emailfrom"]);
            $email->FromName($result["emailfrom"]);

            $email->Subject   = $result["subject"];
            $email->Body      = $result["message"];

但是它发送和显示为Root User - root@localhost

我知道我可以在class.phpmailer.php文件中更改这个,但我想能够在上面的代码中设置它。

这有可能吗?


你确定 $result["emailfrom"] 已经设置了值吗? - tlenss
是的,它确实具有值。 - charlie
8个回答

15

好的,简而言之:

$email->From = "email.address@gmail.com";
$email->FromName = "Support Team";

这对我起作用了。


是的,这对我也起作用了,并且这似乎更符合在http://phpmailer.worxware.com/?pg=tutorial上找到的基本示例,该示例不使用getter和setter。$mail->From = "from@example.com";$mail-AddAddress("myfriend@example.net"); - nmcilree
错误的方法。应该调用该方法,因为它提供了验证。 - tivnet

9

将整个代码块放在try catch语句中,并使用启用了异常的phpmailer进行初始化。

$email = new PHPMailer(true);

看起来使用了默认值。因此,在调用 setFrom() 时出现问题。而且它会在没有启用异常的情况下默默地失败,因为它返回 false

try {
  // your mail code here
} catch (phpmailerException $e) {
  echo $e->getMessage();
}

请将电子邮件和发件人名称的设置更改为:

$email->setFrom($result["emailfrom"], $result["emailfrom"]);

FromName 是一个属性而不是方法。


我想让它显示发件人的姓名而不是电子邮件地址。 - charlie
我已经成功让它显示电子邮件地址,但无法显示名称。 - charlie
你知道电子邮件是怎么工作的吧?你也需要一个电子邮件地址... :) $email->setFrom($result["emailfrom"], $result["emailfrom"]); - tlenss
那个不起作用,我尝试了Name,email@domain.comemail@domain.com,Name。 - charlie
这就是类的工作原理。你正在将 FromName 当作方法进行调用,但它实际上是一个属性。你应该使用 setFrom 来代替。 - tlenss
将您的调用更改为$email->FromName = $result["emailfrom"];。这应该可以正常工作,除非您的SMTP服务器出了问题! - tlenss

3

class.phpmailer.php文件包含“var $FromName ='Root User';”部分,可以将其更改为“Desired Name”,从而完成您的工作。


没关系,如果你只有一个回复地址并且不想知道为什么事情不能正常运行,那就这样吧。当某些东西无法正常运行时,我倾向于想要知道原因。我已经使用PHPMailer相当长的时间了,但这个问题突然出现了。版本没有改变。显然是我的问题,但我很难找到它的原因。 - RationalRabbit

1
在您的表单中,当您获取1. 电子邮件 和 2. 姓名 时,它应该如下所示:
  1. <input type="text" name="emailfrom">

  2. <input type="text" name="namefrom">

在您的php代码中,它应该像这样:

$mail->setFrom($_POST['emailfrom'],$_POST['namefrom']);

当我在infinityhost上使用这些设置时,我遇到了同样的问题。希望这可以帮助您。
$mail->Port = 587; // Which port to use, 587 is the default port for TLS security.
$mail->SMTPSecure = 'tls'; // Which security method to use. TLS is most secure.```


0

编辑您的phpmailer.php文件,更改:

if($mail->Send()){

至:

if (mail($_POST["email"], 
         $_POST["subject"],
         $_POST["message"],
         $_POST["sender"])) {
  echo'Email Sended';
}

         *HTML* 
<form action="phpmailer.php" method="POST">
    <input type="hidden" name="sender" value="From: Support Team<Support@email.com>"/>
</form>

if ($mail->Send()) { 如果您同时发送电子邮件并且未声明发件人,则设置为 Auto root。


0

当我只发送第一个参数到setFrom()时,即name <email>,我遇到了这个问题。

setFrom()不知道如何解析这个结构。

将其更改为两个单独的参数解决了这个问题。


0

使用:

$mail->setFrom('here email add of sender','here name of the sender');

第一个参数是电子邮件地址,如果为空或不是有效的电子邮件地址,则在使用php mailer发送邮件时显示为ROOT用户


0

对于 PHPMailer 版本:5.1

这个方法对我有效:

    $mail->SetFrom('no-reply@example.com', 'Name From');

希望它能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接