从localhost发送电子邮件到外部电子邮件帐户

时间:2012-02-02 07:57:26

标签: php mysql

if(mysql_affected_rows()==1)
            {
                $msg="To activate your account, please click on the following link:\n\n 

http://localhost:80/activate.php?email=".urlencode($email)."&key=".$activation;
                if(mail($email,"Registration Confirmation", $msg, "From: myemail@mycompany.com\r\nX-

Mailer: php"))
                {
                    echo '<div> Thank you for registering. A confirmation email has been sent to '.

$email.'.Please click on the link to activate your account then</div>';
                }
            }   

我使用该代码段从myemail@mycomapany.com发送电子邮件至$ email(myyahoo@yahoo.com),但我未能在yahoo帐户中收到任何电子邮件。不过,我已经在浏览器中显示了回显的消息,表明邮件成功。此外,我已尝试直接通过Outlook从myemail@mycomapany.com发送电子邮件到雅虎帐户,它工作正常。有人请帮我修复源剪辑或任何其他设置以使邮件功能正常工作吗?非常感谢。

编辑:顺便说一下,我还设置了我的php.ini的stmp脚本块,如下所示,

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

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = postmaster@localhost

我的问题是将我的本地计算机设置为本地邮件服务器,我编辑php.ini如上所述,但它仍然无法正常工作。

[解决]

<?php
function SendMail($from, $to, $subject, $body)
{

require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();                                      
$mail->Host = "mail.mycompany.com";  
$mail->SMTPAuth = true;     
$mail->Username = "My name";  // SMTP username
$mail->Password = "mypassword"; // SMTP password = one used in Outlook

$mail->From = "myemail@mycompany.com";
$mail->FromName = "Registration Confirmation Email";
$mail->AddAddress($to);


$mail->IsHTML(true);                                  // set email format to HTML

$mail->Subject = $subject;
$mail->Body    = $body;


if(!$mail->Send())
{   
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;

   return false;
}

return true;
}
?>

我包含上面的代码片段来演示一个使用phpmailer的小但有效的示例。感谢在下面的帖子中向我介绍它的人。

4 个答案:

答案 0 :(得分:2)

看看phpMailer它很好用,非常容易使用,你可以从现有的电子邮件帐户发送电子邮件(如gmail)

答案 1 :(得分:1)

尝试使用此脚本,您也可以从此脚本向本地文件发送电子邮件至外部电子邮件。

require_once('class.phpmailer.php');
define('SMTPSERVER', 'mail.yourcompany.com');// sec. smtp server
define('SMTPUSER', 'info@yourcompanyname.com'); // sec. smtp username
define('SMTPPWD', '123456'); // sec. password

$useremail = 'mail@mail.com';
$msg = 'your text here';
$from = 'info@yourcompanyname.com';
$mailTest=new EmailService();
if ($mailTest->generalMailer($useremail, $from, 'Yoursite.com', 'Your company name', $msg)) {
} else {
    if (!$mailTest->generalMailer($useremail, $from, 'Yoursite.com', 'Your company name', $msg)) {
        if (!empty($error)) echo $error;
    } else {
        echo 'Yep, the message is send (after hard working)';
    }
}
header("location:index.php?email_msg=Email sent successfully");

答案 2 :(得分:0)

您应该查看邮件标题。大部分时间原因是:

  • 跳过回复/来自标题
  • Skipped X-Mailer

有关详细信息,请参阅here

修改

好的,我想我知道问题可能在哪里。

LAMP和WAMP之间存在很大差异。 Linux系统往往具有sendmail库,它允许您在不配置任何内容的情况下将邮件发送到其他系统。 Windows没有。

因此,您应该安装SMTP服务器,以便将邮件发送到外部源。请查看details的这个问题。

此外,如果您需要对此进行测试,则应该查看Papercut,这在测试系统时是必不可少的。

如果您可以发送普通mail(),您也应该能够从图书馆发送邮件。不是相反的方式。唯一的例外是,如果您使用现有的SMTP / IMAP服务器来执行此操作,例如的Gmail。

答案 3 :(得分:0)

您确定本地计算机上安装了MTA(邮件传输代理=邮件服务器)吗?否则,您将需要使用ISP的SMTP服务器。

主要是mail.yourprovider.comsmtp.yourprovider.com(与Outlook中用于外发邮件的主机名相同)。 PHP不能单独邮件,它需要一个MTA(本地或远程)才能这样做。