【发布时间】:2021-12-19 09:21:26
【问题描述】:
我是编程新手,目前正在寻找仅发送一封电子邮件的方法,就像 网络课程 教给我的那样(我不想要大量电子邮件),这是链接:' How to Send Bulk Email in PHP using PHPMailer with Ajax JQuery'。
我有两个地方运行这个函数,一个是index.blade.php,一个是ClientController。
index.blade.php
<form action="{{ route('clients.destroy',$client->id) }}" method="POST">
<a href="{{ route('clients.edit',$client->id) }}">
<i class="fas fa-pencil-alt"></i>
</a>
<button type="button" name="email_button" class="email_button"
id="{{ $client->_id }}"
method="post" action="single" email_data="{{ $client->email }}">
<i class="fas fa-envelope"></i>
</button>
@csrf
@method('DELETE')
<button type="submit"><i class="far fa-trash-alt"></i></button>
</form>
这是 index.blade.php
底部的 JQuery 和 Ajax<script>
$(document).ready(function(){
$('.email_button').click(function(){
$(this).attr('disabled', 'disabled');
var id = $(this).attr("id");
var action = $(this).data("action");
var email_data = $(this).data("email_data");
$.ajax({
url:'{{ route('send-email-test') }}',
method:'POST',
data:{email_button: email_data, _token: '{{csrf_token()}}'},
beforeSend:function(){
$('#'+id).html('Sending...');
$('#'+id).addClass('uk-text-danger');
},
success:function(data){
if(data = 'ok')
{
$('#'+id).text('Success');
$('#'+id).removeClass('uk-text-danger');
$('#'+id).removeClass('uk-text-info');
$('#'+id).addClass('uk-text-success');
}
else
{
$('#'+id).text(data);
}
$('#'+id).attr('disabled', false);
}
});
});
});
</script>
这是我的路线和脚本
// Here's my script in layout
<script src="{{ asset('js/jquery.min.js') }}" type="text/javascript"></script>
// Here's my route
Route::post('send-email-test','ClientController@send_mail')->name('send-email-test');
创建索引后,我尝试使用 ajax 路由到我的控制器。
客户端控制器
namespace App\Http\Controllers;
use App\Models\Company\Client\Client;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
class ClientController extends Controller
{
public function send_mail()
{
if(isset($_POST["email_data"]))
{
require 'vendor/phpmailer/phpmailer/src/Exception.php';
require 'vendor/phpmailer/phpmailer/src/PHPMailer.php';
require 'vendor/phpmailer/phpmailer/src/SMTP.php';
require 'class/class.phpmailer.php';
$output = '';
foreach($_POST['email_data'] as $row)
{
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->Port = '587'; //Initially is 465, doesn't work
$mail->SMTPAuth = true;
$mail->Username = 'xxxxxxx@gmail.com';
$mail->Password = 'xxxxxxx';
$mail->SMTPSecure = 'tls'; //Initially is SSL, doesn't work either
$mail->From = 'xxxxxxxx@gmail.com';
$mail->FromName = 'Coverage Giant';
$mail->addAddress($row["email_data"]);
$mail->To($row["email_data"]);
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = 'Welcome To Coverage Giant';
$mail->Body = '
<p>Sed at odio sapien. Vivamus efficitur</p>
';
$mail->AltBody = '';
$client_email = $mail->Send();
if($$client_email["code"] == '400')
{
$output .= html_entity_decode($client_email['full_error']);
}
}
if($output == '')
{
echo 'ok';
}
else
{
echo $output;
}
}
}
}
如你所见,我正在做与 Web 课相反的事情,因为 Webslesson 使用 index.php 和 send_mail.php,我使用的是 index.blade.php 和 ClientController。因为在应用了 Websleeson 向我展示的内容后,它不能很好地运行,所以我稍微反转引擎,认为它可能会反过来工作。
我现在的问题是,我的 JQuery 和 Ajax 运行正常,并且能够从 index.blade.php 路由到 ClientController。尽管如此,在路由到控制器之后,我似乎无法使用PHPMailer 发送一封电子邮件;也许我的控制器和 PHPMailer 有问题?
我也想知道,有没有更好的方法来发送一封电子邮件?
顺便说一句,我正在使用 MongoDB 和 Laravel。我的 UI 是 Uikit 而不是 Boostrap。
【问题讨论】:
-
在你的项目中使用laravel.com/docs/8.x/mail,Laravel Mail 为你的项目剪裁。
标签: ajax laravel mongodb email phpmailer