laravel 中的联系表如何安排mailercontroller 和env 文件?

Contact form in laravel how to arrange mailercontroller and env file?

我有一个表单,我的网站访问者可以在其中输入姓名、电子邮件地址和消息,我在 env 文件中提供了我的 gmail 帐户凭据

//here is the ENV File Configuration

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=abc@gmail.com
MAIL_PASSWORD=bcccc124444
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=abc@gmail.com
MAIL_FROM_NAME="${APP_NAME}"

phpmailer 代码如下

public function sendmail($email,$name,$message) {


       //dd($email,$name,$message);
        require base_path("vendor/autoload.php");
        $mail = new PHPMailer(true);     // Passing `true` enables exceptions

        try {
 $mail->SMTPDebug =0;
        $mail->isSMTP();
        $mail->Host = 'smtp.gmail.com';             //  smtp host
        $mail->SMTPAuth = true;
        $mail->Username = 'abc@gmail.com';
        $mail->Password ='mypassword';
        $mail->SMTPSecure = 'tls';                  
        $mail->Port =587;                        
        $mail->setFrom($email,$name);
        $mail->addAddress('receivemail@gmail.com');
        $mail->isHTML(true);  
        $mail->Subject = 'WebQuery';
        $mail->Body =$message;
if( !$mail->send() ) {
               dd('not send');
                return back()->with("failed", "Email not sent.")->withErrors($mail->ErrorInfo);
            }
            
            else {
                dd('send');
                return back()->with("success", "Email has been sent.");
            }

        } catch (Exception $e) {
            dd($e);
             return back()->with('error','Message could not be sent.');
        }
    }

为什么我总是收到来自 abc@gmail.com 的电子邮件为什么不是来自访问者在表单中输入的电子邮件如何自定义电子邮件功能和环境 laravel 8

Laravel 使用您的默认 MAIL_FROM_ADDRESS 除非您为您的邮件覆盖它。如果您使用某种 notification 或正常的 mail,您可以在处理创建邮件时设置 from 字段。

为了提供更多信息,您必须在生成邮件的位置显示代码。

这是因为你在伪造发件人地址。不要那样做。这不仅是个坏主意,而且一些大型电子邮件提供商(包括 gmail)会阻止您这样做,并且会用您的帐户名代替。从您自己的地址发送此类邮件,并在 reply-to header 中提供提交者的地址。这样收件人就可以点击回复并将消息发送到正确的位置,而无需伪造任何东西。

这也是 the PHPMailer examples 向您展示的方法。

第二个问题是该函数在第二次调用时会崩溃,因为您有一个 autoload.php 的无条件加载,这将导致致命错误。在 Laravel 应用程序中,您无论如何都不需要自己加载该自动加载器;该应用程序会为您处理。