php.ini&SMTP =-如何传递用户名和密码


Answers:


41

PHPmail()命令不支持身份验证。您的选择:

  1. PHPMailer的-教程
  2. -教程
  3. 自定义功能-请参阅注释部分中的各种解决方案:http : //php.net/manual/en/ref.mail.php

8
值得注意的是,如果(a)服务器上安装了sendmail并且(b)php.ini文件中提供了身份验证详细信息,则PHPmail() 确实支持身份验证。有关详细信息,请参见下面的答案。
James McCormack

@JamesMcCormack,如果PHP在这两种情况下仅支持身份验证,那么PHPMailer的工作原理是什么?我只是PHP,它允许在代码中定义身份验证详细信息。
dxvargas

@hiphip詹姆斯·麦考马克(James McCormack)指的是PHP mail(),而不是PHPMailer
mastazi'1

要使mail()支持身份验证,请使用hMailServer。我花了5分钟时间进行设置。看到我的答案:stackoverflow.com/a/34818989/1293492
塔马斯·博瓦里

38

我将以下详细信息应用于php.ini文件。它的作品很好。

SMTP = smtp.example.com
smtp_port = 25
username = info@example.com
password = yourmailpassord
sendmail_from = info@example.com

这些详细信息与Outlook设置相同。


如果SMTP服务器正在使用该端口,它是否也应使用​​465端口工作?
塔玛斯

嗯 您可以指定的任何端口。
sugunan '16

2
在PHP 5.6.20上对我不起作用:Warning: mail(): SMTP server response: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM
Hannobo,2016年

7
不为我工作,并一直没能找到任何文件,任何会表明,用户名或密码是正确的php.ini配置选项
wedstrom

@wedstrom输入后,在重新启动apache时是否遇到任何错误?
sugunan '16

20

使用Windows的Fake sendmail发送邮件。

  1. 创建一个名为sendmail中的文件夹C:\wamp\
  2. 在这些提取4个文件sendmail夹:sendmail.exelibeay32.dllssleay32.dllsendmail.ini
  3. 然后配置C:\wamp\sendmail\sendmail.ini
smtp_server=smtp.gmail.com
smtp_port=465
auth_username=user@gmail.com
auth_password=your_password
  1. 以上内容适用于Gmail帐户。然后配置php.ini:

    sendmail_path =“ C:\ wamp \ sendmail \ sendmail.exe -t”

  2. 现在,重新启动Apache,这基本上就是您需要做的。


1
它对我不起作用。Windows 10,WampServer 2.5,PHP 5.5.12。
塔玛斯

谢谢!!!这对我有用。经过一周的尝试设置我自己的SMTP服务器,我得到了您的答案的
卑诗省

使用适用于Windows的最新sendmail并遵循基本的安装说明,请确保smtpphp.ini文件中删除配置,因为如果您已经处理了sendmail.ini文件中的这些值,则实际上并不需要这样做。另外,如果我sendmail_path = "C:\Program Files (x86)\sendmail\sendmail.exe"不带-t参数使用,我只能使其工作。如果有人好奇,我在Windows 10使用IIS
haZh

13

PHP确实在mail-command上具有身份验证!

以下在WAMPSERVER上为我工作(Windows,php 5.2.17)

php.ini

[mail function]
; For Win32 only.
SMTP = mail.yourserver.com
smtp_port = 25
auth_username = smtp-username
auth_password = smtp-password
sendmail_from = you@yourserver.com

2
这不适用于IIS 6上的PHP 5.3.8。我查看了源代码,似乎实际上未实现smtp身份验证。
Zmaster 2011年

3
对我不起作用,我认为您使用的是sendmail而不是smtp。
Draex_

1
同意-在Windows上,仅当服务器上安装了“ Fake Sendmail”时,此答案才有效。可以从以下网站
James McCormack

工程于W8.1,PHP 5.2.17,使用端口587的远程SMTP服务器
Stphane

使用端口465对我不起作用。Windows 10,WampServer 2.5,PHP 5.5.12。
塔玛斯

8
  1. 安装Postfix(兼容Sendmail)。
  2. 编辑/etc/postfix/main.cf阅读:
#Relay config
relayhost = smtp.server.net
smtp_use_tls=yes
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_sasl_security_options = noanonymous
  1. 创建/etc/postfix/sasl_passwd,输入:
smtp.server.net username:password
  1. 类型# /usr/sbin/postmap sasl_passwd

  2. 然后运行: service postfix reload

现在,PHP将使用该sendmail -t -i命令照常运行邮件,而Postfix将拦截该邮件并将其中继到您提供的SMTP服务器。


6

我更喜欢PHPMailer工具,因为它不需要PEAR。但是,无论哪种方式,您都有一个误解:您不希望SMTP用户和密码在PHP服务器范围内进行设置。这应该是每个应用(或每个页面)的设置。如果要在不同的PHP页面上使用相同的帐户,请将其添加到某种settings.php文件中。


如何在php文件中添加用户名和密码。我可以使用它通过developer.postmarkapp.com/developer-smtp.html邮戳
SCC

其他一些流行的应用程序可能依赖PHPMailer,例如内部的WordPress,而后者又可以配置为使用内部mail()函数发送实际的电子邮件。因此,首选PHP范围的配置。
Bart Verkoeijen 2014年

5

经过一整天的努力,我终于找到了解决方案。这是我从带有WAMP的Windows XP发送邮件的方法。

  1. 使用Google的SMTP服务器。您可能需要一个帐户。
  2. 下载并安装Fake Sendmail。我刚刚下载了它,解压缩后放在WAMP文件夹中。
  3. 创建一个测试PHP文件。见下文。
<?php
    $message = "test message body";
    $result = mail('recipient@some-domain.com', 'message subject', $message);
    echo "result: $result";
?>
  1. 更新您的php.ini文件和sendmail.ini文件(sendmail.ini位于sendmail文件夹中)。
  2. 如果它不起作用,请检查刚刚创建的sendmail文件夹中的error.log文件。

参考:


它对我不起作用。Windows 10,WampServer 2.5,PHP 5.5.12。
塔玛斯

2

这些答案已经过时和过时了。最佳实践..

composer require phpmailer/phpmailer

sendmail.php文件中的下一个只需要以下内容

# use namespace
use PHPMailer\PHPMailer\PHPMailer;

# require php mailer
require_once "../vendor/autoload.php";

//PHPMailer Object
$mail = new PHPMailer;

//From email address and name
$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";

//To address and name
$mail->addAddress("recepient1@example.com", "Recepient Name");
$mail->addAddress("recepient1@example.com"); //Recipient name is optional

//Address to which recipient will reply
$mail->addReplyTo("reply@yourdomain.com", "Reply");

//CC and BCC
$mail->addCC("cc@example.com");
$mail->addBCC("bcc@example.com");

//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";

if(!$mail->send()) 
{
    echo "Mailer Error: " . $mail->ErrorInfo;
} 
else 
{
    echo "Message has been sent successfully";
}

您可以根据自己的喜好进行配置。



0
  1. 安装最新的hMailServer。在最后一步中,“运行hMailServer Administrator”。
  2. 连接到“本地主机”。
  3. “添加域...”
  4. 设置为“ 127.0.0.1。” 作为“域”,单击“保存”。
  5. “设置”>“协议”>“ SMTP”>“电子邮件的传递”
  6. 将“ localhost”设置为“本地主机名”,在“ SMTP Relayer”部分中提供您的数据,单击“保存”。
  7. “设置”>“高级”>“ IP范围”>“我的电脑”
  8. 禁用“要求SMTP身份验证”组中的“外部到外部电子邮件地址”复选框。
  9. 如果您修改了php.ini,请重写以下3个值:

“ SMTP =本地主机”,

“ smtp_port = 25”,

; sendmail_path =”。

信用:如何配置WAMP(本地主机)以使用Gmail发送电子邮件?


这在使用WampServer 2.5和PHP 5.5.12的Windows 10上完美运行。
塔马斯·博瓦里(TamásBolvári),

嗨,@ Tamas在SMTP Relayer中,我通过AWS SES主机名,端口,用户名和密码设置了凭证。但它不能正常工作。你知道我是否应该做些其他的事吗?
泽尼特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.