我正在努力解决我的问题,我有一个共享托管服务,出于安全原因禁用了PHP邮件功能。
我需要使用PHP发送一些表单数据,我只知道如何使用PHP邮件功能发送表单数据。
我尝试使用phpmailer,从GitHub获得ir,但没有成功。
我的问题很简单,有没有一个变通方法可以在不使用PHP邮件功能的情况下发送表单数据,以绕过禁用的phpmail和nobody=对我的共享web主机进行调整?
<?php
function send_mail($email, $recipient_name, $message='')
{
require("phpmailer/class.phpmailer.php");
require("phpmailer/class.smtp.php");
$mail = new PHPMailer();
$mail->CharSet="utf-8";
$mail->IsSMTP();
$mail->Host = 'localhost';
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = "user@mysite.com";
$mail->Password = "password";
$mail->setFrom($email, $recipient_name);
$mail->AddAddress($email, $recipient_name);
$mail->WordWrap = 50;
$mail->IsHTML(false);
$mail->Subject = "Contact form";
$mail->Body = $message;
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
}
//vars
$subject = "Contac form";
$from = $_POST['email'];
//data
$msg = "NAME: " .$_POST['name'] ."<br><br>n";
$msg .= "EMAIL: " .$_POST['email'] ."<br><br>n";
$msg .= "WEBSITE: " .$_POST['website'] ."<br><br>n";
$msg .= "MESSAGE: " .$_POST['message'] ."<br>n";
//Headers
$headers = "MIME-Version: 1.0rn";
$headers .= "Content-type: text/html; charset=UTF-8rn";
$mail="support@mysite.com";
//send mail
//mail($mail, $subject, $msg, $headers, "-f $from");
send_mail($from, $_POST['name'], $msg);
?>
首先,您必须包含使用PHP mailer 发送邮件的所有要求
require 'assets/PHPMailer/PHPMailer/src/Exception.php';
require 'assets/PHPMailer/PHPMailer/src/OAuth.php';
require 'assets/PHPMailer/PHPMailer/src/PHPMailer.php';
require 'assets/PHPMailer/PHPMailer/src/POP3.php';
require 'assets/PHPMailer/PHPMailer/src/SMTP.php';
require('assets/PHPMailer/simple_html_dom.php');
在你定义设置之后,这里是我使用的配置:(我使用gmail发送邮件,要使用gmail,你必须在你的gmail中启用配置才能使用不太安全的应用程序(
$mailSub = filter_input('insert mail subject here');
$mailMsg = $html_new;
$mailto = 'inset mail you wish to send here';
$mail = new PHPMailerPHPMailerPHPMailer();
$mail->IsSmtp();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';
// LOGIN INFO TO YOUR GMAIL
$mail->Username = 'gmail';
$mail->Password = 'password for gmail';
$mail->SetFrom('name you wish to show as sender');
//-------------------------------------------
$mail->Subject = 'subject';
$mail->Body = 'body of a mail, you can use html here';
$mail->AddAddress('reciever mail');
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->Send()
这里有一个链接,指向我的github repo和使用php mailer的完整应用程序,也许这会有一些帮助。
从本质上讲,这一切都归结为了解共享托管提供商为您提供的环境。
由于他们禁用了php的mail((函数,我认为他们试图不必处理使用其服务的垃圾邮件发送者。
因此,他们可能也不会在本地主机上运行SMTP服务,并且很可能会过滤掉到端口25的传出流量,以阻止您在其他邮件服务器上发送它。但再说一遍:他们可能(还(不会。
但值得一看的是:
- 本地主机上是否运行SMTP服务
- 他们是否为合法客户提供任何传出中继SMTP服务
- 他们是否过滤端口25上发送到世界其他地方的SMTP
- 它们是否允许您连接到经过身份验证的SMTP服务进行传递
这是一项艰巨的工作,如何获得答案在很大程度上取决于你获得的服务有多少,以及你在互联网上还有什么其他资源。无论如何,最简单的方法就是简单地问你的供应商:他们知道他们允许什么,阻止什么,下一步想做什么,这取决于他们试图在哪里摆脱垃圾邮件发送者。
无论如何,你最好的选择是向目标地址在gmail上的谷歌服务器使用经过身份验证的交付。这是最不可能被谷歌或知道他们做什么的共享托管提供商过滤掉的。注意:经过身份验证交付意味着网络服务器有办法向谷歌进行身份验证,因此,如果不同客户之间的分离不是最理想的(到目前为止,这并不总是万无一失的(,那么你在共享主机中的"邻居"可以相对轻松地获得这些凭据,所以要确保这不是你非常关心的帐户-因此:创建一个gmail地址以供使用。。。
如果他们什么都不允许。您仍然可以将电子邮件保存在服务器上,从桌面或其他服务器检索,并通过编程从那里发送。