LoginSignup
0
0

誤送信防止。blastengineを使ってメール送信をキャンセルする

Last updated at Posted at 2024-04-18

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を使えば大量のメールを確実に配信できます。ぜひお試しください。

エンジニア向けメール配信システム「ブラストエンジン(blastengine)」

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0