邮件和短信服务的基本模板

安装: 0

依赖项: 0

建议者: 0

安全性: 0

星级: 0

关注者: 1

分支: 0

开放问题: 0

语言:Blade

类型:

dev-master 2023-01-03 13:51 UTC

This package is not auto-updated.

Last update: 2024-09-24 16:38:37 UTC


README

Laravel 邮件和短信服务的基本模板和实现。

最低支持的 Laravel 版本: laravel 7, laravel 8 和 laravel 9

使用 composer 的安装命令

composer require cooperativecomputing/mailing-and-sms-template

环境变量存储在名为 keys.txt 的文本文件中

在您的 HTML 表单 Blade 文件中使用 @csrf 关键字,因为 Laravel 使用它来防止跨站请求伪造,并且在您从表单发送任何请求之前是必需的。

app.php

添加服务提供者

/*
* Package Service Providers...
*/

CooperativeComputing\Services\EmailingServiceProvider::class,
CooperativeComputingSMS\Services\SmsServiceProvider::class,

发布短信和邮件服务

php artisan vendor:publish --tag=CC-Emails
php artisan vendor:publish --tag=CC-SMS

composer.json

在 composer json 文件中,在 autoload --> psr-4 下添加以下内容以添加邮件模板

"CooperativeComputing\\Routes\\": "routes/",
"CooperativeComputing\\Controllers\\": "app/Http/Controllers/",
"CooperativeComputing\\Mail\\": "app/Mail/",

在 composer json 文件中,在 autoload --> psr-4 下添加以下内容以添加短信模板

"CooperativeComputingSMS\\Routes\\": "routes/",
"CooperativeComputingSMS\\Controllers\\": "app/Http/Controllers/"

在终端中运行 composer du 命令。

接下来执行以下命令

php artisan install:email
php artisan install:sms

上述命令将安装包文件夹中的文件到您的主项目文件中。

发送邮件

在您的 .env 文件中添加环境变量

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=YOUR_USERNAME_FROM_MAILTRAP
MAIL_PASSWORD=YOUR_PASSWORD_FROM_MAILTRAP
MAIL_ENCRYPTION=tls

发送给单个用户

public function sendEmail()
{
    $validator = [
        'sender' => 'sender@mail.com',
        'to' => 'receiver@mail.com',
        'subject' => 'some subject',
        'message' => 'A message from sender',
    ];
    Mail::queue((new MailEmails($validator))->onQueue('emails'));
    return "mail has been sent";
}

发送给多个用户

public function sendEmail()
{
    $validator = [
        'sender' => 'sender@mail.com',
        'to' => ['receiver_one@mail.com', 'receiver_two@mail.com', 'receiver_three@mail.com'],
        'subject' => 'some subject',
        'message' => 'A message from sender',
    ];
    Mail::queue((new MailEmails($validator))->onQueue('emails'));
    return "mail has been sent";
}

可邮寄文件

发送邮件

public $validator;

/**
    * Create a new message instance.
    *
    * @return void
    */

public function __construct($validator)
{
    $this->validator = $validator;
}

/**
    * Build the message.
    *
    * @return $this
    */

public function build()
{
    return $this->from($this->validator['sender'])
                ->subject($this->validator['subject'])
                ->to($this->validator['to'])
                ->markdown('email-welcome');
}

发送单个附件

public function build()
{
    return $this->from($this->validator['sender'])
                ->subject($this->validator['subject'])
                ->to($this->validator['to'])
                ->attach(public_path('<single attachment>'))
                ->markdown('email-welcome');
}

发送多个附件

public function sendEmail()
    {
        $attachments = [
            public_path('<attachment 1>'),
            public_path('<attachment 2>'),
            public_path('<attachment 3>'),
        ];
        $validator = [
            'sender' => 'sender@mail.com',
            'to' => 'receiver@mail.com',
            'subject' => 'some subject',
            'message' => 'A message from sender',
            'attachments' => $attachments
        ];
        Mail::queue((new MailEmails($validator))->onQueue('emails'));
        return "mail has been sent";
    }

在电子邮件文件内部

public function build()
{
    $this->from($this->validator['sender'])
        ->subject($this->validator['subject'])
        ->to($this->validator['to'])
        ->markdown('email-welcome');
    foreach ($this->validator['attachments'] as $attachment) {
        $this->attach($attachment);
    }
    return $this;
}

在您的邮件中添加更多选项

return $this->from($this->validator['sender'])
            ->subject($this->validator['subject'])
            ->to($this->validator['to'])
            ->cc($this->validator['people'])
            ->bcc($this->validator['private_people'])
            ->attach(base_path('<path of any file>'))
            ->markdown('email-welcome');

发送短信

在您的 .env 文件中添加环境变量

TWILIO_ACCOUNT_SID=YOUR_TWILIO_SID_FROM_TWILIO
TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN_FROM_TWILIO
TWILIO_SENDER=YOUR_TWILIO_PHONE_NUMBER_FROM_TWILIO

对于 Twilio 模板,我使用 Laravel 的表单请求方法,因为我不能公开我的个人手机号码。

注意

在实际注册号码后发送短信时,请确保使用国家代码,例如,在巴基斯坦,我们使用 +92,否则 Twilio 无法发送短信。

短信控制器

public function sendSMS()
{
    $otp = $this->generateOTP();

    $request = (object) [
        'sms_message' => 'Text message with OTP: '. $otp,
        'sms_receiver' => '<The registered phone number(s)>',
    ];

    try {
        $sid = config('sms.sid', 'some_sid');
        $sender = config('sms.sender', 'some_sender');
        $authToken = config('sms.auth', 'some_token');
        $twilio = new Client($sid, $authToken);
        $twilio->messages->create(
            $request->sms_receiver,
            [
                "body" => $request->sms_message,
                "from" => $sender,
                "mediaUrl" => ["https://demo.twilio.com/owl.png"]
            ]
        );
        return 'SMS was sent';
    } catch (TwilioException $e) {
        throw $e;
    }
}

public function generateOTP()
{
    return random_int(0,99999);
}

messages->create() 这是 Twilio 用于创建短信并发送的方法。

第一个参数接受接收者的手机号码,第二个参数是主要的短信本身。

  • body 这是您的短信的主要内容或要发送的文本
  • from 这是短信的发送者,对于 Twilio,您必须注册您的号码
  • mediaUrl 这是一个可选字段,我们可以使用它发送一些媒体 URL

更多与 Laravel 的 Twilio 示例

https://www.twilio.com/blog/create-sms-portal-laravel-php-twilio