Laravel: электронная почта не отправляется - PullRequest
2 голосов
/ 18 февраля 2020

Я пытаюсь отправить электронное письмо пользователю, используя шаблоны. Таким образом, перед отправкой электронного письма следует убедиться, что пользователь получил электронное письмо в этот день или нет. Это похоже на то, что Один пользователь должен получать одно письмо только в день, поэтому я добавляю заявление, которое равно

if (EmailSave::where('user_id',$user_id)->whereDate('created_at', Carbon::today())->exists()) {

, после того как я добавляю эту строку, письмо не отправляется, может кто-нибудь помочь мне в этом. Я новичок в laravel.

    foreach ($users as $user) {
        foreach($auto_email_templates as $mail) {

                $email_id = $mail->id;
                $user_id = $user->id;


                if( $user->created_at < Carbon::now()->subDays($mail->days)){  //check when the acc create

                    if (EmailSave::where('user_id',$user_id)->whereDate('created_at', Carbon::today())->exists()) {

                        if (EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->count()< 1){  //sent email one time only

                            if (EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->whereDate('created_at', '>', Carbon::now()->addDays(30))) { //mail sent again after 30 days  

                                $mails = new EmailSave;
                                $mails->user_id = $user->id;
                                $mails->email_id =$mail->id;
                                Mail::to($user->email)->send(new Automail($mail));
                                $mails->save();

                            }  
                        }
                    }
                }
            }
          }

1 Ответ

2 голосов
/ 18 февраля 2020

Интересно, если вы уже настроили свои учетные данные электронной почты на .env, если нет, вы можете попробовать использовать mailtrap.io для почтовой песочницы.

Зарегистрируйте свою учетную запись mailtrap на https://mailtrap.io/ , затем go на вкладку «Настройка SMTP», чтобы получить ваше имя пользователя и пароль.

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=25
MAIL_USERNAME=ENTER_YOUR_MAILTRAP_USERNAME_AT_SMTP_SETTING_PAGE(should be 14 characters long)
MAIL_PASSWORD=ENTER_YOUR_MAILTRAP_PASSWORD_AT_SMTP_SETTING_PAGE(should be 14 characters long)

Существует ошибка logi c для исправления, попробуйте этот тип кодов, если это соответствует вашим требованиям.

foreach ($users as $user) {
            foreach($auto_email_templates as $mail) {

                $email_id = $mail->id;
                $user_id = $user->id;


                if( $user->created_at < Carbon::now()->subDays($mail->days)){  //check when the acc create

                    $ableToSendMail = false;
                    if (!EmailSave::where('user_id',$user_id)->whereDate('created_at', Carbon::today())->exists()) {

                        // looks like this logic need to break down into two separate checking cause the requirement is different
                        // one is email to send one time only when there is everyday checking
                        // another one will breach first checking, which see the created_at date which more than 30 days

//                        if (EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->count()< 1){  //sent email one time only
//
//                            if (EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->whereDate('created_at', '>', Carbon::now()->addDays(30))) { //mail sent again after 30 days  
//
//                                $mails = new EmailSave;
//                                $mails->user_id = $user->id;
//                                $mails->email_id =$mail->id;
//                                Mail::to($user->email)->send(new Automail($mail));
//                                $mails->save();
//
//                            }
//                        }

                        // Email does not sent before, proceed to email send
                        if (EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->count()< 1){  //sent email one time only
                            $ableToSendMail = true;
                        }


                        if (EmailSave::where('email_id',$email_id)->where('user_id',$user_id)->whereDate('created_at', '>', Carbon::now()->addDays(30))) { //mail sent again after 30 days
                            $ableToSendMail = true;
                        }
                    }

                    if ($ableToSendMail) {
                        $mails = new EmailSave;
                        $mails->user_id = $user->id;
                        $mails->email_id =$mail->id;
                        Mail::to($user->email)->send(new Automail($mail));
                        $mails->save();
                    }
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...