Gmailでは、メール誤送信を防止するためにメール送信をキャンセルする機能があります。メールを送信して30秒以内であれば、キャンセルできます。
技術的に見れば、キャンセル機能は送信を一時的に保留する仕組みになります。同様の処理をblastengineを使った場合にも実現できます。今回は各SDK毎の実装方法を紹介します。
JavaScript SDKの場合
JavaScript SDKを使ってメール送信をキャンセルするには、以下のようにします。
import { BlastEngine, Mail } from 'blastengine';
new BlastEngine('USER_ID', 'API_KEY');
const mail = new Mail;
mail
.setFrom('admin@example.com', 'Admin')
.setSubject('Test subject')
.addTo('user@example.jp')
.setText('メールの本文');
await mail.send(new Date(Date.now() + 30000)); // 30秒後に送信
// 送信をキャンセルする場合
await mail.cancel();
PHP SDKの場合
PHP SDKを使ってメール送信をキャンセルするには、以下のようにします。
use Blastengine\Client;
Blastengine\Client::initialize('USER_ID', 'API_KEY');
$mail = new Blastengine\Mail();
$mail
->to('user@example.jp', array("name1" => "Test"))
->from('admin@example.com')
->subject('Test subject')
->text_part('This is test email to __name1__');
$delivery_date = new DateTime();
$delivery_date->add(new DateInterval('PT30S'));
$mail->send($delivery_date); // 30秒後に送信
// 送信をキャンセルする場合
$mail->cancel();
Ruby SDKの場合
Ruby SDKを使ってメール送信をキャンセルするには、以下のようにします。
require 'blastengine'
Blastengine.initialize api_key: 'API_KEY', user_name: 'USER_ID'
mail = Blastengine::Mail.new
mail.from email: 'admin@example.com', name: 'Admin'
mail.addTo email: 'user@example.jp', insert_code: { name1: "name 1" }
mail.subject = "Test email"
mail.text_part = "This is a test email __name1__"
mail.html_part = "<html><body>This is a test email __name1__</body></html>"
mail.send(DateTime.now + Rational(30, 86400)) # 30秒後に送信
# 送信をキャンセルする場合
mail.cancel
Python SDKの場合
Python SDKを使ってメール送信をキャンセルするには、以下のようにします。
client = Blastengine("USER_ID", "API_KEY")
mail = Mail()
mail.subject('メールの件名')
mail.text_part('テキスト本文 __name__')
mail.from_address("admin@example.com", "Admin")
mail.to('user@example.jp', {'name': 'name 2', 'hash': 'bbbbb'})
# 30秒後に送信
dt = datetime.datetime.now() + datetime.timedelta(seconds=30)
mail.send(dt)
# 送信をキャンセルする場合
mail.cancel()
Java SDKの場合
Java SDKを使ってメール送信をキャンセルするには、以下のようにします。
BEClient.initialize("USER_ID", "API_KEY");
BEMail mail = new BEMail();
mail.subject ="Test mail from blastengine";
mail.text = "Mail body";
mail.html = "<h1>Hello, from blastengine</h1>";
BEMailAddress fromAddress = new BEMailAddress("admin@example.com", "Admin");
mail.setFrom(fromAddress);
mail.addTo("user@example.jp");
try {
// 30秒後に送信
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MINUTE, 5);
bulk.send(calendar.getTime());
// 送信をキャンセルする場合
mail.cancel();
} catch (BEError e) {
}
Google Apps Script SDKの場合
Google Apps Script SDKを使ってメール送信をキャンセルするには、以下のようにします。
new BlastEngine('API_USER', 'API_KEY');
const mail = new Mail;
mail
.setSubject('テストメール')
.setText('本文 __name1__')
.setFrom('admin@example.com')
.addAttachment(Utilities.newBlob('Hire me!', 'text/plain', 'resume.txt'))
.addTo('user@example.jp', {name1: 'Atsushi'});
const now = new Date();
mail.send(new Date(now.getTime() + 30 * 1000)); // 30秒後に送信
// 送信をキャンセルする場合
mail.cancel();
使い方
使い方としては、各SDKともにMailクラスを利用します。そして、 send
メソッドの引数に送信日時を指定します。そうすると、メールがバルク(一括送信)オブジェクトになり、送信時のステータスが RESERVE
になります。この状態(またはWAIT)であれば cancel
メソッドが有効です。
cancel
メソッドはバルクメールでのみ利用可能です。トランザクション(即時送信)オブジェクトでは使えないので注意してください。もちろん、送信予定時間を過ぎれば送信されてしまうので、キャンセルできません。
cancel
処理を実行するとステータスが EDIT
になり、再送信可能な状態に戻ります。
まとめ
メールは即時送信にせず、一定の時間を確保しておくことで誤送信を大場に減らせます。大量メール送信などでミスすると、大きな問題になるので注意してください。
blastengineを使えば大量のメールを確実に配信できます。ぜひお試しください。