从php中的localhost发送电子邮件


Sending email from localhost in php

好吧,我只是被使用php脚本从localhost发送电子邮件的大量方法和工具淹没了。

你们能帮我清理一下吗?

以下是我的行动类型:

  1. 我已经在php.ini中启用了gmail-smtp,将端口设置为465
  2. 我已经下载了phpmailer,按照说明进行了测试,但没有成功
  3. 我有远程服务器邮件配置(我的网站以前托管的地方)
  4. 此外,我有一个从互联网上下载的php脚本,应该可以发送电子邮件

使用php脚本从localhost发送电子邮件到底需要什么?

您需要像这样的本地SMTP服务器。或者,为了让你的生活无限轻松,下载WAMP,它包含了本地PHP项目所需的一切。

正如我所看到的,您使用gmail作为smtp然后您需要配置php-mailer脚本。。。如果你编辑你的答案并把代码放在那里,那就很好了。

之后,您需要检查权限,文件权限/服务器权限/gmail权限

您需要从dns mx主机名获取要发送电子邮件的域(email@boo.xx->域boo.xx):

function getMX($hostname = "boo.xx", $show = 0){
    if(dns_get_mx($hostname, $mxhosts, $weights)) {
        $i = 0;
        $mxList = NULL;
        foreach($mxhosts as $key => $host) {
            if($show == 1) echo "Hostname: $host (Weight: {$weights[$key]}) <br>";
            $ip = gethostbyname($host);
            if($show == 1) echo "IP " . $ip . "'n<br>";
            if($show == 1) echo "IP " . gethostbyaddr($ip) . "'n<br>";
            $mxList[$i]['host'] = $host;
            $mxList[$i]['ip'] = $ip;
            $mxList[$i]['weight'] = $weights[$key];
            $i++;
        }
        return $mxList;
    } else {
        echo "Could not find any MX records for $hostname'n";
    }
}

现在您有mx主机的列表,然后您需要:

使用phpmailer或socket客户端(例如,具有ssl/tls支持和身份验证)将电子邮件发送到端口25到此主机(始终为端口25,无需身份验证):

<?php
// Send with smtp ssl
// ini_set("SMTP","ssl://smtp.gmail.com");
// ini_set("smtp_port","465");
// Login email and password
$login = "your-email@cool.xx";
$pass = "123456";
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
try{
    // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    echo $socket = stream_socket_client('tcp://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    if (!$socket) {
        print "Failed to connect $err $errstr'n";
        return;
    }else{
        // Http
        // fwrite($socket, "GET / HTTP/1.0'r'nHost: www.example.com'r'nAccept: */*'r'n'r'n");
        // Smtp
        echo fread($socket,8192);
        echo fwrite($socket, "EHLO cool.xx'r'n");
        echo fread($socket,8192);
        // Start tls connection
        echo fwrite($socket, "STARTTLS'r'n");
        echo fread($socket,8192);
        echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
        // Send ehlo
        echo fwrite($socket, "EHLO cool.xx'r'n");
        echo fread($socket,8192);
        // echo fwrite($socket, "MAIL FROM: <hello@cool.com>'r'n");
        // echo fread($socket,8192);
        echo fwrite($socket, "AUTH LOGIN'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, base64_encode($login)."'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, base64_encode($pass)."'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, "rcpt to: <to-email@boome.com>'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, "DATA'n");
        echo fread($socket,8192);
        echo fwrite($socket, "Date: ".time()."'r'nTo: <to-email@boome.com>'r'nFrom:<zour-email@cool.xx'r'nSubject:Hello from php socket tls'r'n.'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, "quit 'n");
        echo fread($socket,8192);
        /* Turn off encryption for the rest */
        // stream_socket_enable_crypto($fp, false);
        fclose($socket);
    }
}catch(Exception $e){
    echo $e;
}

无身份验证的ANd

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
try{
    // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    echo $socket = stream_socket_client('tcp://mxhost.boo.xx:25', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
    if (!$socket) {
        print "Failed to connect $err $errstr'n";
        return;
    }else{
        // Http
        // fwrite($socket, "GET / HTTP/1.0'r'nHost: www.example.com'r'nAccept: */*'r'n'r'n");
        // Smtp
        echo fread($socket,8192);
        echo fwrite($socket, "EHLO cool.xx'r'n");
        echo fread($socket,8192);
        // Start tls connection
        echo fwrite($socket, "STARTTLS'r'n");
        echo fread($socket,8192);
        echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
        // Send ehlo
        echo fwrite($socket, "EHLO cool.xx'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, "MAIL FROM: <hello@cool.com>'r'n");
        echo fread($socket,8192);
        //echo fwrite($socket, "AUTH LOGIN'r'n");
        //echo fread($socket,8192);
        //echo fwrite($socket, base64_encode($login)."'r'n");
        //echo fread($socket,8192);
        //echo fwrite($socket, base64_encode($pass)."'r'n");
        //echo fread($socket,8192);
        echo fwrite($socket, "rcpt to: <to-email@boome.com>'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, "DATA'n");
        echo fread($socket,8192);
        echo fwrite($socket, "Date: ".time()."'r'nTo: <to-email@boome.com>'r'nFrom:<zour-email@cool.xx'r'nSubject:Hello from php socket tls'r'n.'r'n");
        echo fread($socket,8192);
        echo fwrite($socket, "quit 'n");
        echo fread($socket,8192);
        /* Turn off encryption for the rest */
        // stream_socket_enable_crypto($fp, false);
        fclose($socket);
    }
}catch(Exception $e){
    echo $e;
}