05/04/2018 - PHP, SYMFONY
Bu örneğimizde Amazon Simple Email Service (AWS SES) ile "text" email göndereceğiz.
Terminalde composer require aws/aws-sdk-php
komutunu çalıştırarak AWS SDK for PHP kütüphanesini yükleyin.
AWS panelinden "Identity and Access Management" bölümüne gidip yeni bir kullanıcı yaratın ve "AmazonSESFullAccess" policy ekleyin. Aşağıdaki secret
kodu sadece bir kereye mahsus olarak kullanıcı yaratıldığında görünebilir olduğundan, onu güvenli bir yere not edin. Ayrıca bu kullanıcı normal kullanıcılar gibi AWS sistemine bağlanmaması gerektiği için, "Group" özelliği "AdministratorAccess" vs. yerine "None" olarak tanımlanmalıdır.
parameters:
aws_sdk:
version: 'latest'
region: 'eu-west-1'
credentials:
key: 'USERS_AWS_KEY'
secret: 'USERS_AWS_SECRET'
services:
app.aws.sdk:
class: Aws\Sdk
arguments:
- '%aws_sdk%'
AppBundle\Util\AwsUtil:
arguments:
$sdk: '@app.aws.sdk'
declare(strict_types=1);
namespace AppBundle\Util;
use Aws\Sdk;
use Aws\Ses\Exception\SesException;
use Psr\Log\LoggerInterface;
class AwsUtil
{
private const CHARSET = 'UTF-8';
private $logger;
private $sdk;
public function __construct(
LoggerInterface $logger,
Sdk $sdk
) {
$this->logger = $logger;
$this->sdk = $sdk;
}
public function sendEmail(
iterable $toAddresses,
string $fromAddress,
string $subject,
string $body
): ?string {
$messageId = null;
try {
$result = $this->sdk->createSes()->sendEmail([
'Destination' => [
'ToAddresses' => $toAddresses,
],
'Source' => $fromAddress,
'Message' => [
'Subject' => [
'Charset' => self::CHARSET,
'Data' => $subject,
],
'Body' => [
'Text' => [
'Charset' => self::CHARSET,
'Data' => $body,
],
],
],
]);
$messageId = $result->get('MessageId');
} catch (SesException $e) {
$this->logger->error(sprintf('Email not sent. [%s]', $e->getAwsErrorMessage()));
}
return $messageId;
}
}