この記事は デジタル創作サークル UniProject Advent Calendar 2025 21 日目の記事です。
前書き
XreaのMail & Backupはめっちゃ安いです。とてつもなく安いです。
しかもAPIが無料提供されています。
やることは一つですよね?遊び倒します
今回私はGASでGoogle Formにメールアドレスが送信されたら、それを登録して、メールで送信する仕組みを作ってみました。
本編
目標はGoogle Formでメールアドレスを作成して、それをメールに認証情報と一緒に送信することとします。
使ったもの
- Xrea Mail & Backup
- GAS
ただにメールアドレスを作ってみる
function editMailAccount(mailadress) {
const data = {
account: "username", // ユーザー名
server_name: "m1.xrea.com", // 自分のメールサーバー
api_secret_key: "API_KEY", // APIキーです
"param[0][address_name]": mailadress,
"param[0][address_domain]": "your_domain", // あなたのドメイン
"param[0][address]": `${mailadress}@your_domain`, // あなたのドメイン
"param[0][pop_how]": 2, // 方式
"param[0][quota]": 5000000000, // 容量(これは5GB)
"param[0][autorespond]": 0,
"param[0][clamd]": 0,
"param[0][spamd]": 0,
"param[0][customd]": 0,
"param[0][pop_pass_rand]": 1 // パスワードを自動生成するかどうか
};
const formData = [];
for (const key in data) {
formData.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key]));
}
const payload = formData.join("&");
const options = {
method: "post",
payload: payload,
contentType: "application/x-www-form-urlencoded",
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch("https://api.xrea.com/v1/mail/edit", options);
const result = JSON.parse(response.getContentText());
Logger.log(JSON.stringify(result, null, 2));
} catch (error) {
Logger.log("Error: " + error.toString());
}
}
constのdataに関しては
を見れば細かく設定できます。
POSTリクエストを送ることでメールアドレスを作成できます。
パスワードを調べてみる
先ほどのコードでは自動生成したパスワードは取得できません。
そこで、APIのメールリストを使って、メールアドレスのパスワードを取得します。
function checkmailadress(mailadress) {
const data = {
account: "username", // ユーザー名
server_name: "m1.xrea.com", // 自分のメールサーバー
api_secret_key: "API_KEY", // APIキーです
grep: mailadress,
};
const options = {
method: "post",
payload: data,
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch("https://api.xrea.com/v1/mail/list", options);
const result = JSON.parse(response.getContentText());
const keys = Object.keys(result.result);
if (keys.length === 0) {
return false;
}
const first = result.result[keys[0]];
const password = first.pop_pass;
return password;
} catch (error) {
Logger.log("Error: " + error.toString());
}
}
grepを指定しないと、いらないメールアドレスの情報まで取得してくるので、指定しておきます。
メールアドレスが存在しない場合はfalseを返すようにしているので、もしメールアドレスを作成するフォームを作る場合は、これを使ってメールアドレスがあるかどうかを調べる仕組みを使ってください。
Xreaは同じメールアドレスがあっても作れてしまう謎システムなので、それを防止するためですね。
メールを送信してみる
XreaのAPIとは関係ないですが、メールを送信する場合も多いと思うので、GASでメールを送る方法を記載しておきます。
function sendMailFromXrea(mailadress,responderEmail, password) {
const body = `
メールアドレス: ${mailadress}@your_domain<br>
パスワード: ${password}<br>
ログインページURL: https://m1.xrea.com/mailr/<br>
`;
GmailApp.sendEmail({
to: responderEmail,
subject: "メールアドレス作成のご案内",
htmlBody: body,
name: "your_name",
replyTo: "your_domain",
noReply: false
});
}
詳しいメールの送り方などは
などを参照してください。
Google Formで回答内容を取得
Google Formの回答を取得して、メールアドレスを取得する方法です
const responses = e.response.getItemResponses();
const mailaddress = responses[0].getResponse();
[0]の部分は質問の番号です。
何問目かなどを記入してみてください。
全部あわせてみる
function onFormSubmit(e) {
const responses = e.response.getItemResponses();
const responderEmail = e.response.getRespondentEmail();
const mailadress = responses[2].getResponse();
if (!checkmailadress) {
cancelsendMailFromXrea(responderEmail)
return;
}
editMailAccount(mailadress)
const password = checkmailadress(mailadress)
sendMailFromXrea(mailadress,responderEmail, password)
}
こんな感じのコードになりました。
申請するメールアドレスをconst mailadress = responses[2].getResponse();で取得して、checkmailadressでそのメールアドレスが存在するか、存在する場合は作成できない旨をメールで送信。
editMailAccountでメールアドレスを作成します。
const password = checkmailadress(mailadress)でパスワードを取得します。
sendMailFromXreaで作成したメールアドレスやパスワードなどを送信します。
まとめ
XreaのAPIは使いにくい部分があるので、よくなることを期待してます。
この記事を書いている途中に気づいたことなんですけど、メールアドレスを作成する際に、editMailAccountを使っても、重複したことをお知らせとか、まったくしてくれないので、先にメールアドレスがあるかを調べておくべきです。
普通に二つ目とか作りますからねこれ、、、