スポンサーサイト

一定期間更新がないため広告を表示しています

[Google PR]

Twitterはじめました。プラプラ | Twitter

API Key導入でSendGrid Securityからのメールに対応する[CakePHP on Azure App Services]

SendGrid_Security_Mail_20210120

[New Deadline for Breaking Change] Authenticate with API Keys by February 17th

先日からSendGrid Securityから来ていた英文メール。めんどくさいので、どうせスパムでしょと嘘ぶいてみて見ぬふりしていました。(ダメ絶対!)

が、そろそろホントに対応しないとまずい雰囲気。。。

というわけで、重い腰をあげてSendGridのセキュリティー対応をしてみました。

【SendGridをどのように使っていた?】
CakePHP、Azure App Servicesで構築したWEBサイトのメール送信に使っていました。主にジョブ処理結果の通知で使っている程度でたいしたことはしていません。ただ、通知されなくなるとちょっと困ります。

【SendGridで何を対応すればよい?】
対応が必要なのは2点。期日までに以下の対応をしなければ、メール送信が拒否されるとのこと。

1)ユーザー名・パスワードの認証ではなく、APIKeyでの認証に切り替える
2)SendGridアカウントの2段階認証導入

なお、アプリケーションの修正が必要なのは1)のAPIKey対応のみ。2)は、SendGridの管理画面で導入ができます。

【APIKey対応】
<1.SendGridの管理画面>
SendGridの管理画面にログインし、APIKeyを作成します。
(AzurePortalからだと、SendGridアカウントから、Manageボタンを押すとSendGridの管理画面がひらきます)

(SendGridの管理画面の左部のナビゲーションから) Settings⇒APIKeysで、APIKeyの管理画面を表示。

Create APIKeyボタンを押して、任意のAPIKey名と、権限を設定します。権限は、メールを送信するだけなら、Restricted AccessのMail Sendのみ有効にすればOKです。

作成されたAPIKeyをコピーします。なお、APIKeyは二度と表示されないのでコピーし忘れた場合、再作成することとなります。

(参考)
APIキーの管理 - ドキュメント | SendGrid

<2.CakePHP メール送信設定>
メール設定ファイル(email.php)を開きます。
app-Config-email.php

username、passwordを変更。
usernameは、「apikey」という固定文字列、 passwordには、APIKeyを設定します。

以上で完了です。こんな簡単でいいんかいなー。と思いながらも問題なくテストメールが送信できました。少し拍子抜け。(うまくいかない予定だったのに。笑)

あとは、アカウントの2段階認証の導入です。こちらも期日までに対応しないとメール送信が拒否されるとのことです。私は携帯SMSで登録を完了しました。

とりあえず、これでSendGrid セキュリティー対応は完了です。
[Google PR]

Twitterはじめました。プラプラ | Twitter

【CakePHP】CakeEmailクラスなら簡単!htmlメール送信やらCronジョブ送信。

先日、とある案件でCakePHP2系のメール機能を使いました。

数年前にもCakePHPでサイト作成したことがあったのですが、バージョンは1系。
標準のメール送信機能では日本語が文字化けし、
結局、外部ライブラリを使用してメール送信をしました。

でも今回(CakePHP2系)は違います。

CakePHP標準のCakeEmailクラスでさくっとメール送信することができました。

文字化けもなし。
(ただし、今回作成したのは業務システムでしたので、
限られた環境の限られた人に対してOKだっただけですので、念のため。)

「メール送信したいだけ」といった軽い使い方の場合、外部ライブラリを使わず、
標準機能だけでメール送信できると便利ですね。

使い方も簡単!
STEP0
事前に、config/email.php にメール送信設定

STEP1
App::uses('CakeEmail', 'Network/Email');
で、CakeEmailクラスを事前によみこんでおいて、

STEP2
送信する際、
$email = new CakeEmail('default');
な感じで、CakeEmailクラスをインスタンス化して、

STEP3
$email->send();
で送信完了。わずか3ステップ!

・・・

簡単さを伝えたかったのですが、ちょっとはしょりすぎました。
サンプルコードは以下のサイトでどうぞ。(汗)

CakePHP2でメール送信を手軽に行うための実装CakeEmailを使ってみたら本当に簡単すぎて便利、メールフォームがなくてもメール送信機能だけで | Ultraひみちゅぶろぐ
CakePHP2.X 「CakeEmail」 の使い方 | 高橋 です
cakephp2.x メール送信 | まとめーたー

htmlメールも簡単!


今回、htmlメールで送信する仕様だったのですが、楽々でした。
画面出力を作るような感じで、メール送信できました。

$email = new CakeEmail('default');
$email->emailformat('html');
$email->template($template);
$email->to($mail_to);
$email->subject($subject);
$email->viewVars(array('sendData' => $data));
$email->helpers(array('Utill'));

$sent = $email->send();
if ($sent){
//正常終了
$result = true;
} else {
//異常終了
$result = false;
}

画面出力の場合、レイアウトとビューを使いますが、
メール送信の場合は、メール専用のレイアウトとテンプレートを使います。
(text用とhtml用があります)

htmlメールの場合は以下のレイアウトファイル・テンプレートファイルを使用。
・app/View/Layouts/Emails/html/レイアウト.ctp
・app/View//Emails/html/テンプレート.ctp

画面出力の場合、モデルから取得してきたデータを$hits->setでビューに渡しますが、
メール送信の場合、viewVars でテンプレートへ渡します。
また、テンプレート内ではヘルパーが使用できます。

標準で読み込まれないヘルパーは helpers で指定してください。

注意点としては、1行の行数が長すぎる場合、CakePHPの自動改行にまかせると
文字化けしてしまいます。(ここで少しはまりました
マルチバイトが考慮されていないのかもしれません。
なので、ここはテンプレート側で手動で改行します。

<イメージ タグは全角。コピペしても動きません>
echo '<p>メールです</p>' . "¥n";>
echo '<p>ちゃんと見てね</p>' . "¥n";

改行コード(¥n)は、ダブルコーテーションでくくる必要があります。

シングルコーテーションだとそのまま表示されてしまうのでご注意(ここでも少しはまりました

モデルから取得したデータを、テンプレートへ引き渡してテンプレートで
表示まわりを整形し、メール送信。

画面まわりを作るのと同じ要領でメール送信できました。


Cronジョブ連携も簡単!


あと、CakeEmailはクラスで実装されていますので、shellからの呼び出しも簡単です。
(CakePHP1系はコンポーネントで実装されていました)

使い方は全く同じ。
shellファイルの先頭で
App::uses('CakeEmail', 'Network/Email');
してあげれば、いいだけです。

いやー簡単でした。
(文字化けでちょっと焦ったのは、ここだけの話しでお願いします。。。)

CakePHPの実践的なTipsが100例以上収録されています(メール送信サンプルもあり)
>>Webアプリ開発を加速する CakePHP2定番レシピ119

[Google PR]

Twitterはじめました。プラプラ | Twitter



[Google PR]


[最新エントリ 5]

>>トップページ

カテゴリー
プロフィール
links
recent comment
  • 【Access】コンボボックス対応版。超簡単な帳票フォームでの矢印上下キー行移動。
    山田 裕樹 (04/28)
  • 【Access】vbaでhmacが正しく計算できた!!
    まさ (06/01)
  • 【Access】AccessReportMailメール送信時のポートを25から587へ
    わら (05/31)
  • 【SQLServer】超シンプル!再帰CTE(共通テーブル式)で連続データを作成する。
    sazi (09/08)
  • 【あまっちゃお】Amazon商品検索「あまっちゃお」プロジェクト始動。Ver00-06-00 β
    カメちゃん (07/31)
  • 【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?
    花姉 (03/17)
  • 【Access】実行中のmdb(自分自身)をバックアップコピーする方法。
    亀 (02/06)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    管理人 (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    あ (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    K (11/13)
recent trackback
  • 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
    awgs Foundry (10/29)
  • 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
    XMLがキライ。 (04/09)
  • Vistaから、LinkStation(NAS)にアクセスできません。
    そのほかいろいろ (09/06)
sponsored links