[英]Sending email from localhost in php
Ok, I'm just overwhelmed by the number of ways and tools to send emails from localhost using php script. 好的,我只是被使用php脚本从本地主机发送电子邮件的方法和工具数量所淹没。
Can you guys just help me clearing some things up? 你们能帮我清理一些东西吗?
These are my types of actions: 这些是我的操作类型:
What exactly do I need to send emails from localhost using php script? 我到底需要使用php脚本从本地主机发送电子邮件吗?
as i can see, you use gmail as a smtp then you need configure the php mailer script ... that will good if you edit your answer and put the code there. 如我所见,您将gmail用作smtp,那么您需要配置php邮件程序脚本...如果您编辑答案并将代码放在那里,那会很好。
after that you need to check permission, file permission/server permission/gmail permission 之后,您需要检查权限,文件权限/服务器权限/ gmail权限
You need get from dns mx hostnames for domain where you want send email (email@boo.xx -> domain boo.xx): 您需要从要发送电子邮件的域的dns mx主机名获取(email@boo.xx-> domain 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";
}
}
Now you have list with mx hosts then you need: 现在您有了包含mx主机的列表,那么您需要:
Send email to port 25 to this host (always port 25 and without authentication) with phpmailer or socket client (example with ssl/tls support and authentication): 使用phpmailer或套接字客户端(例如具有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 without authentication 无认证
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.