从SMTP服务器使用PHP发送电子邮件

时间:2013-01-22 10:42:11

标签: php email smtp

$from = "someonelse@example.com";
$headers = "From:" . $from;
echo mail ("borutflis1@gmail.com" ,"testmailfunction" , "Oj",$headers);

我在使用PHP发送电子邮件时遇到问题。我收到错误:SMTP server response: 530 SMTP authentication is required

我的印象是你可以发送没有SMTP的电子邮件来验证。我知道这封邮件可能会被过滤掉,但现在这并不重要。

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = someonelse@example.com

这是php.ini文件中的设置。我该如何设置SMTP?是否有任何SMTP服务器不需要验证,或者我自己必须设置服务器吗?

9 个答案:

答案 0 :(得分:149)

当您通过需要SMTP身份验证的服务器发送电子邮件时,您确实需要指定它,并设置主机,用户名和密码(如果不是默认端口,则可能设置端口 - 25)。

例如,我通常使用与此类似的设置的PHPMailer:

$mail = new PHPMailer();

// Settings
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

// Content
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$mail->send();

您可以在此处找到有关PHPMailer的更多信息:https://github.com/PHPMailer/PHPMailer

答案 1 :(得分:43)

<?php
    ini_set("SMTP", "aspmx.l.google.com");
    ini_set("sendmail_from", "YOURMAIL@gmail.com");

    $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com";

    $headers = "From: YOURMAIL@gmail.com";


    mail("Sending@provider.com", "Testing", $message, $headers);
    echo "Check your email now....<BR/>";
?>

READ ON

答案 2 :(得分:40)

对于Unix用户,mail()实际上是使用Sendmail命令发送电子邮件。您可以更改环境,而不是修改应用程序。 msmtp是一个具有Sendmail兼容CLI语法的SMTP客户端,这意味着它可以代替Sendmail使用。它只需要对你的php.ini进行一些小改动。

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"

然后即使是lowly mail()函数也可以使用SMTP优点。如果您尝试将现有应用程序连接到sendgrid或mandrill等邮件服务而不修改应用程序,那么它非常有用。

答案 3 :(得分:13)

以下是使用PHP PEAR

的方法
null

如果您使用Gmail SMTP,请记住在Gmail帐户中启用SMTP,并在设置

下启用

答案 4 :(得分:12)

问题是PHP mail()函数的功能非常有限。有几种方法可以从PHP发送邮件。

  1. mail()在您的系统上使用SMTP服务器。您可以在Windows上使用至少两台服务器:hMailServerxmail。我花了几个小时来配置和获取它们。在我看来,第一个更简单。目前,hMailServer正在使用Windows 7 x64。
  2. mail()在使用Linux的远程或虚拟机上使用SMTP服务器。当然,像Gmail这样的真实邮件服务不允许在没有任何凭据或密钥的情况下直接连接。您可以设置虚拟机或使用位于LAN中的虚拟机。大多数Linux发行版都有开箱即用的邮件服务器。配置它并享受乐趣。我在Debian 7上使用默认的exim4来监听它的LAN接口。
  3. 邮件库使用直接连接。 Libs更易于设置。我使用了SwiftMailer,它完美地从Gmail帐户发送邮件。我认为PHPMailer也很不错。
  4. 无论您的选择是什么,我建议您使用一些抽象层。您可以在运行Windows的开发计算机上使用PHP库,只需在使用Linux的生产计算机上使用mail()功能。抽象层允许您根据运行应用程序的系统交换邮件驱动程序。使用抽象MyMailer方法创建抽象send()类或接口。继承两个类MyPhpMailerMySwiftMailer。以适当的方式实施send()方法。

答案 5 :(得分:10)

有些SMTP服务器无需身份验证即可运行,但如果服务器需要身份验证,则无法避开此问题。

PHP的内置邮件功能非常有限 - 只能在WIndows中指定SMTP服务器。在* nix上,mail()将使用操作系统的二进制文件。

如果要将电子邮件发送到网络上的任意SMTP服务器,请考虑使用SwiftMailer之类的库。这样您就可以使用Google Mail的外发服务器。

答案 6 :(得分:2)

如果您在Linux上托管Wordpress站点并具有服务器访问权限,则可以通过安装msmtp来省去一些麻烦,msmtp允许您从标准php mail()函数通过smtp发送。 msmtp是Postfix的更简单替代,后者需要更多的配置。

以下是步骤:

安装msmtp

sudo apt-get install msmtp-mta ca-certificates

创建一个新的配置文件:

sudo nano /etc/msmtprc

...具有以下配置信息:

# Set defaults.    
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
host <smtp.example.net>
port 587
auth on
user <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

您需要替换“ <”和“>”中的所有内容所代表的配置数据(包括删除这些内容)。对于主机/用户名/密码,请使用您的常规凭据通过邮件提供商发送邮件。

告诉PHP使用它

sudo nano /etc/php5/apache2/php.ini

添加以下一行:

sendmail_path = /usr/bin/msmtp -t

完整的文档可以在这里找到:

https://marlam.de/msmtp/

答案 7 :(得分:0)

对于另一种方法,您可以采用以下文件:

<ul>
  <li>
     <div>
        <p>some text </p>
        <button>delete</button>
        </div>
    </li>
    <li>
      <div>
        <p>some other text </p>
        <button>delete</button>
        </div>
     </li>
</ul>  

并像这样发送:

From: Sunday <sunday@gmail.com>
To: Monday <monday@gmail.com>
Subject: Day

Tuesday Wednesday

https://php.net/function.curl-setopt

答案 8 :(得分:0)

如果有人需要,我为PHP创建了一个轻量级的SMTP电子邮件发件人

https://github.com/jerryurenaa/EZMAIL

在生产和开发环境中均经过测试。

我希望它可以帮助新人们寻找简单的解决方案。