9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事は デジタル創作サークル 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を使っても、重複したことをお知らせとか、まったくしてくれないので、先にメールアドレスがあるかを調べておくべきです。
普通に二つ目とか作りますからねこれ、、、

9
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
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?