我想知道如何在2020年在php 7.2中设置自动SMTP邮件系统。
我知道mail()
函数,但这是在初始设置之后进行的。
我已经看到了关于stackoverflow的其他问题,但是我在发布此问题之前,我只发现了 2011 或 2012 < / strong>,并且从那时起,PHP在安全性方面和其他方面已经发生了很大变化。
这是我尝试过的:
根据我发现的情况,我应该在
ini_set()
文件中更改php.ini
,但是那里没有ini_set()
函数。我所做的就是像被告知那样将smtp
更改为smtp=my-mail-server-of-choice-here
,将smtp_port
更改为smtp_port=587
。
此外,我应该更新
sendmail.ini
文件夹中的sendmail
,但是(猜测是什么)sendmail folder
不存在->这也意味着{{1 }}和sendmail.exe
也不存在
我也收到此错误sendmail.ini
这是文件:
mail(): SMTP server response: 530 5.7.0 Must issue a STARTTLS command first
该文件(根据我的阅读)应该可以在$to = 'my-users-mail@some-random.mail';
$subject = "HTML email";
$message = "Hi Bob!";
$headers = "MIME-Version: 1.0"."\r\n";
$headers .= "Content-type:text/html;charset=UTF-8"."\r\n";
$headers .= 'From: my-mail@gmail.com'."\r\n";
mail($to,$subject,$message,$headers);
文件中的任何地方{strong>不存在的ini_set()
中进行修复-我猜只有不合时宜的解决方案可用< / p>
什么是现代标准,即php 7.2,该方法实际上可以正常工作并且安全?
顺便说一句,我正在php.ini
上使用XAMPP v3.2.4
(我将在生产中迁移到WAMPP
),并且我正在使用localhost
作为邮件服务
答案 0 :(得分:1)
您对“现代”思维有个坏主意。做事的新方式实际上是使用扩展,框架等...-可重用代码是这个快速扩展的世界
像90年代或80年代那样,人们没有互联网那么广泛或根本没有互联网,如果您想(让我说)在两台计算机之间建立连接(想想NASA之类的东西),就必须写从头开始使用您自己的协议(POP或IMAP),并花费数周甚至数月的时间进行编程。
现在是2020年。我们有很多可重用的代码可供广泛使用,包括存储库,开源软件等...您了解图片
当然,您可以在一周内用php编写自己的身份验证,也可以直接下载
Net_Socket(我有1.2.2)-> https://pear.php.net/package/Net_Socket/download/ Net_SMTP(我有1.9.2)-> https://pear.php.net/package/Net_SMTP/download/ Mail_extension(我的版本为1.4.1)-> https://pear.php.net/package/Mail/download/
使用7-zip提取所有内容,并像这样进行构造
您的主文件夹
.Mail-1.4.1
>Mail.php
>Mail
> some default files(dont touch these)
> Net(here you paste files from Net_SMTP and Net_Socket - they should be named SMTP.php and Socket.php)
. sendmail.php
在sendmail.php中,您可以这样写:
//Make sure you made your folder/file structure like you should
require_once "./Mail-1.4.1/Mail.php";
$host = "your-mail-server-of-choice-here";
$port = "465";
$username = "your mail or username";
$password = "your password";
//setting up smtp connection
$smtp = Mail::factory(
'smtp',
array (
'host' => $host,
'port' => $port,
//you don't need this if u are using mail server that doesn't need authentication
'auth' => true,
'username' => $username,
'password' => $password
)
);
$from = "your-mail-here";
$to = "recepient-mail-here";
$subject = "Ay bro!";
$body = "Your message here!";
$headers = array (
'From' => $from,
'To' => $to,
'Subject' => $subject
);
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
exit( "Error happened :( -->".$mail->getMessage() );
}
那很容易吧?如果我们按照您的方式去做,您会花费大量的时间和眼泪(是的眼泪)来建立所有这些连接和东西并使其安全等等。我希望您对此结果感到满意!