サイトアイコン Mailtrap

PythonでGmailのSMTPとAPIを使ってメールを送る方法

How to send emails in Python with Gmail

このチュートリアルは、Pythonのさまざまなモジュールを使って各種メールを作成・送信する方法、既存の認証方式の確認などについて、コード例を用いて解説していきます。なお、例としてはGmailのSMTPとAPIサーバーの両方をご紹介します。

Python経由の他のメール送信方法についてお知りになりたい場合は、当社の完全ガイド をご覧ください。

メール配信の準備はできましたか?
Mailtrapを無料で試す

Pythonのsmtplibおよびemailライブラリの設定

Pythonを使ってGmailのSMTP経由でメールを送信するには、smtplibモジュールとemailモジュールを使う必要があります。smtplibは基本的に、SMTP (Simple Mail Transfer Protocol) サーバーを使って接続しメールを送信するための機能を提供してくれるものです。

一方、emailモジュールは、メールメッセージの作成と解析(受信者送信者件名など)のためのクラスを提供し、MIME (Multipurpose Internet Mail Extensions) 標準でメールのエンコードとデコードを可能にします。

それでは手順をひとつずつ見ていきましょう。コードは次のセクションで確認いただけます。

  1. 必要なライブラリをインポートします。(emailからsmtplibMIMETextをインポート)
  2. MIMETextオブジェクトを使ってメールを作成し、件名送信者受信者フィールドの値を設定します。
  3. SMTP_SSL関数を使って、安全なSSL接続経由でGmailサーバーへのSMTP接続を確立します。
  4. SMTPオブジェクトのsendmailメソッドを呼び出し、送信者と受信者のメールアドレス、およびメールメッセージを引数として指定します。

これで、PythonでGmail経由でメールを送信する準備が整いました。次のセクションでは、方法論、例、その他のユースケースについて説明していきます。スキルをブラッシュアップする必要がある場合は、事前にこれらのオンラインPythonコース をチェックしてみてください。

Python経由でGmailのSMTPを使ってメールを送る

前のセクションで説明した内容に基づいて、メール送信で使える簡単なスクリプトを次にご紹介します。

import smtplib
from email.mime.text import MIMEText

subject = "メールの件名"
body = "これはテキストメッセージの本文です"
sender = "送信者@gmail.com"
recipients = ["受信者1@gmail.com", "受信者2@gmail.com"]
password = "パスワード"


def send_email(subject, body, sender, recipients, password):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = sender
    msg['To'] = ', '.join(recipients)
    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
       smtp_server.login(sender, password)
       smtp_server.sendmail(sender, recipients, msg.as_string())
    print("メッセージが送信されました!")


send_email(subject, body, sender, recipients, password)

重要な注意点

2022年5月30日以前は、2段階認証が有効の場合、通常のGmailパスワードを使ってGmailのSMTPサーバーに接続することが可能でした。しかし現在はセキュリティ基準を高めるため、アプリパスワードの使用が必須になっています。

アプリパスワードとはGoogleアカウントで生成される16桁のパスコードで、2段階認証をサポートしていない安全性の低いアプリやデバイスをご利用でも、Gmailアカウントにサインインできるようにするものです。

OAuth 2.0のGmail認証モードの利用も可能ですが、この場合、PythonスクリプトでGmail API送信方式を使う必要があります。

複数の受信者にメールを送る

メールを複数の受信者に送るには、メールアドレスのリストを定義して、複数の受信者への送信を可能にします。さらに「To」フィールドはメッセージヘッダーの下に受信者を設定します。リストからカンマで区切られた文字列に変換され、これはほとんどのメールヘッダーで受け入れられる形式です。

コードはこちらをご覧ください。

import smtplib
from email.mime.text import MIMEText

# メールの件名と本文を定義します。
subject = "メールの件名"
body = "これはテキストメッセージの本文です"
# 送信者のメールアドレスを定義します。
sender = "送信者@gmail.com"
# メールが送信される受信者のリスト。
recipients = ["受信者1@gmail.com", "受信者2@gmail.com"]
# 送信者のメールアカウントのパスワード。
password = "パスワード"

def send_email(subject, body, sender, recipients, password):
    # メールの本文でMIMETextオブジェクトを作成します。
    msg = MIMEText(body)
    # メールの件名を設定します。
    msg['Subject'] = subject
    # 送信者のメールを設定します。
    msg['From'] = sender
    # 受信者のリストをカンマで区切られた単一の文字列に結合します。
    msg['To'] = ', '.join(recipients)
   
    # SSLを使ってGmailのSMTPサーバーに接続します。
    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
        # 送信者の認証情報を使ってSMTPサーバーにログインします。
        smtp_server.login(sender, password)
        # メールを送信します。sendmail関数には、送信者のメール、受信者のリスト、および(文字列としての)メールメッセージが必要です。
        smtp_server.sendmail(sender, recipients, msg.as_string())
    # メールが正常に送信された後、コンソールにメッセージを出力します。
    print("メッセージが送信されました!")

# 関数を呼び出してメールを送信します。
send_email(subject, body, sender, recipients, password)

添付ファイル付きメールを送る

この作業では必要なライブラリをインポートする必要があります。添付ファイルを表すことができるMIMEBaseと、添付ファイルをbase64形式でエンコードするために使われるencodersも必要になります。

以下、完全なスクリプトをご覧ください。添付ファイル付きメールの送信方法を理解するのに役立つコメントも含めました。

import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

sender_email = "送信者@gmail.com"
sender_password = "パスワード" 
recipient_email = "受信者@gmail.com"
subject = "Pythonからのご挨拶"
body = "添付ファイル付き"


with open("attachment.txt", "rb") as attachment:
    # メッセージに添付ファイルを追加します
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
    "Content-Disposition",
    f"attachment; filename= 'attachment.txt'",
)

message = MIMEMultipart()
message['Subject'] = subject
message['From'] = sender_email
message['To'] = recipient_email
html_part = MIMEText(body)
message.attach(html_part)
message.attach(part)

with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
   server.login(sender_email, sender_password)
   server.sendmail(sender_email, recipient_email, message.as_string())

HTMLメールを送る

通常のメールメッセージと同様に、Python経由でGmail SMTPサーバーを使ってHTMLメールを送るには、emailパッケージのMIMETextクラスを使います。その後、プレーンテキストのmsgオブジェクトの代わりにhtml_messageオブジェクトを使い、HTMLコンテンツをメールの本文に貼り付けます。

以下、完全なコードの例です。

import smtplib
from email.mime.text import MIMEText

sender_email = "送信者@gmail.com"
sender_password = "パスワード" 
recipient_email = "受信者@gmail.com"
subject = "Pythonからのご挨拶"
body = """
<html>
  <body>
    <p>これは<b>HTML</b>形式のメールで、PythonからGmailのSMTPサーバーを使って送信されました。</p>
  </body>
</html>
"""
html_message = MIMEText(body, 'html')
html_message['Subject'] = subject
html_message['From'] = sender_email
html_message['To'] = recipient_email
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
   server.login(sender_email, sender_password)
   server.sendmail(sender_email, recipient_email, html_message.as_string())

HTMLを本文に記述する代わりにHTMLテンプレートを使ってメールを送る場合は、表現力豊かで拡張可能かつ高速なテンプレートエンジンであるjinja2パッケージのTemplateクラスを使用できます。

pip install jinja2

以下は、必要なすべてのステップを含むスクリプトです。

import smtplib
from email.mime.text import MIMEText
from jinja2 import Template

sender_email = "送信者@gmail.com"
sender_password = "パスワード" 
recipient_email = "受信者@gmail.com"
with open('template.html', 'r') as f:
    template = Template(f.read())
context = {
    'subject': 'Pythonからのご挨拶',
    'body': 'これはPythonからHTMLテンプレートとGmailのSMTPサーバーを使って送信されたメールです。'
}
html = template.render(context)
html_message = MIMEText(context['body'], 'html')
html_message['Subject'] = context['subject']
html_message['From'] = sender_email
html_message['To'] = recipient_email
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
   server.login(sender_email, sender_password)
   server.sendmail(sender_email, recipient_email, html_message.as_string())

Pythonアプリケーションから動的コンテンツを送る方法についてさらに詳しくお知りになりたい場合は、差し込み印刷に関する当社の記事 をご覧ください。

一斉送信メールを送る

ここではGmail経由で一斉送信(バルク)メールを送信する方法を解説します。これはあくまでデモンストレーションであり、本番環境で実行すべき方法ではない旨、ご留意ください。

Gmailは一斉送信メールやキャンペーンの送信に関するかなり厳しいポリシーがあり、それについては後のセクションで説明いたします(リンク をクリックしてジャンプ)。また、特に新しいドメインやドメイン評価が比較的低い場合、または単に@gmail.comアドレスから送信しようとする場合、到達率が低下する可能性があります。

これらを念頭に置いた上で、以下のスクリプトは、各受信者が個別のパーソナライズされたメールを受信するシナリオに合わせて調整されています。このやり方は、パーソナライズされたマーケティングキャンペーンや通知などで一般的です。

簡単にいうと、同じメッセージが複数の人に送信されますが、1つのメールにグループ化されることはありません。この方法を使うと、受信者リストが互いに開示されることもなく、プライバシーが保護されます。

以下のスクリプトをご確認ください。

import smtplib
from email.mime.text import MIMEText

# メールのコンテンツ
subject = "メールの件名"
body = "これはテキストメッセージの本文です"
sender = "送信者@gmail.com"
recipients = ["受信者1@gmail.com", "受信者2@gmail.com", "受信者3@gmail.com"]  # 受信者のリスト
password = "パスワード"

def send_bulk_emails(subject, body, sender, recipients, password):
    # SSLを使ってGmailのSMTPサーバーに接続
    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
        smtp_server.login(sender, password)  # サーバーにログイン

        # 各受信者をループ処理し、個別のメールを送信
        for recipient in recipients:
            msg = MIMEText(body)  # メールの本文でMIMETextオブジェクトを作成
            msg['Subject'] = subject  # メールの件名を設定
            msg['From'] = sender  # 送信者を設定
            msg['To'] = recipient  # 現在の受信者を設定

            smtp_server.sendmail(sender, recipient, msg.as_string())  # メールを送信
            print(f"{recipient} にメッセージが送信されました!")

# 関数を呼び出してメールを一斉送信
send_bulk_emails(subject, body, sender, recipients, password)

次に、この仕組みについて簡単に説明いたします。

  1. 初期化時に、スクリプトは件名、本文、送信者のメールアドレス、受信者リスト、パスワードを定義します。
  2. send_bulk_emailsを使うと、スクリプトはsmtplib.SMTP_SSLを介してポート465でGmailのSMTPサーバーへの安全な接続を確立します。接続を確立した後、スクリプトは送信者のGmail認証情報を使ってSMTPサーバーにログインします。
  3. 次に、スクリプトは受信者をループ処理し、それぞれに対して以下を実行します。

この方法の利点は、各メッセージが個別にログに記録または処理されることです。送信された各メールの成功をより効率的に追跡できるので、一括操作に役立ちます。

Python経由でGmail APIを使ってメールを送る

Gmail APIは、アプリケーションがGoogleのメールサーバーを使ってメールを送受信できるRESTful APIです。メッセージを取得・管理できる上に、ラベルやスレッドなどのGmail機能も提供しています。

OAuth 2.0認証を使ってPythonでGmail API経由でメールを送る各手順を分析してみましょう。

  1. Google Cloud Platformプロジェクトを設定し、ハンバーガーメニューをクリックして「すべての製品を表示」を選択します。管理セクションで、APIs and services(APIとサービス) を選択します。
  1. 次に、Library(ライブラリ) を選択し、検索バーにGmail APIと入力して、Gmail APIカードをクリックします。
  1. 最後に、Gmail API を有効にするボタンを選択します。
  1. 次に、プロジェクトのクライアントシークレットファイルをダウンロードする必要があります。まず、Create Credentials (認証情報を作成) を選択します。このセクションでは、優先APIとしてGmail APIを選択し、アクセスするデータの種類としてユーザーデータを選びます。
  1. OAuthクライアントIDを取得するには、アプリケーションタイプとしてDesktop App (デスクトップアプリ) を選択し、アプリケーション名を設定して作成を選びます。次に、認証情報をダウンロードしてローカルファイルシステムに保存します。

シークレットファイルをダウンロードすると、ファイルはこの形式になっているはずです。

{
    "installed": {
        "client_id": "463220703866-un8ijck75igunsbh4nhclm74edprhj5p.apps.googleusercontent.com",
        "project_id": "geocaching-366015",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_secret": "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",
        "redirect_uris": [
            "http://localhost"
        ]
    }
}

コーディングを開始する前に、次のコマンドを使ってgoogle-authgoogle-auth-oauthlibgoogle-auth-httplib2、およびgoogle-api-python-clientライブラリをインストールする必要があります。

pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client

ライブラリを正常にインストールした後、SCOPESという変数を作成します。この変数は、アプリがユーザーのデータにアクセスする際に持つ権限を指定する文字列のリストを保持しれます。

その後、flowという別の変数を作成します。InstalledAppFlowクラスを使ってインストール済みアプリのOAuth 2.0フローを作成し、アプリが必要とするOAuth 2.0スコープをSCOPES変数で指定します。

次に、run_local_serverメソッドを呼び出してポート番号を指定し、OAuth 2.0フローを開始します。これにより、ローカルWebサーバーが起動して認証フローを処理し、フローが完了するとOAuth 2.0認証情報を返します。

googleapiclient.discoveryモジュールからbuild関数を呼び出し、サービス名に**‘gmail’、バージョンに‘v1’**を引数として渡し、先ほど呼び出した認証情報を使ってGmailサービスを構築します。

MIMETextオブジェクトを作成してメールメッセージを構築し、‘to’フィールドと‘subject’フィールドの値を適宜設定します。さらに、メールメッセージをbase64エンコードされた文字列としてエンコードします。

最後に、messagesリソースのsendメソッドを呼び出し、リクエストボディとしてcreate_message辞書を渡せばメールを送信できます。

これらすべてのステップをまとめると、Pythonコードは次のようになります。

import base64
from email.mime.text import MIMEText
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from requests import HTTPError
SCOPES = [
        "https://www.googleapis.com/auth/gmail.send"
    ]
flow = InstalledAppFlow.from_client_secrets_file(
            'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
service = build('gmail', 'v1', credentials=creds)
message = MIMEText('これはメールの本文です')
message['to'] = '受信者@サンプル.com' # 例: '受信者@サンプル.com'
message['subject'] = 'メールの件名'
create_message = {'raw': base64.urlsafe_b64encode(message.as_bytes()).decode()}
try:
    message = (service.users().messages().send(userId="me", body=create_message).execute())
    print(F'送信されたメッセージ: {message_object} メッセージID: {message_object["id"]}')
except HTTPError as error:
    print(F'エラーが発生しました: {error}')
    message = None

以上で完了です!このように、数行のコードで構築中のアプリに簡単なメール送信機能を追加できます。もちろんユーザーから収集したメールアドレスの検証 も忘れないで行いましょう。

GmailのSMTP・APIの制限事項

GmailのAPIやSMTPは、メール送信の自動化の場合には便利で信頼性の高いオプションですが、前述のとおりいくつか制限があります。

単一のユーザーまたはアプリケーションがリソースを過剰に消費しないようにするため、APIは1日に送信できるメールの数を制限し、最大メールサイズ制限を設けています。これらの制限に関する正確な数値については、Googleのドキュメント をご確認ください。

APIは、Gmailウェブインターフェースで利用可能なすべての機能(メールの予約配信機能や、特定の種類のフォーマットや添付ファイルを使う機能など)をサポートしていない場合があります。

アプリケーションを認証する際には、必要なデータにアクセスするために適切なOAuthスコープを要求する必要があります。さらに、ユーザーは最小権限の原則に従い、セキュリティを強化するためにジャストインタイムアクセス を利用する可能性も考慮して、アプリケーションにデータへのアクセスを許可する必要があります。適切なOAuthスコープがない場合、ユーザーデータへのアクセス要求は拒否され、エラーが発生してしまいます。

GmailのAPIには、アプリケーションからのすべてのリクエストに適用される1日の使用量制限と、ユーザーごとのレート制限があります。各制限は、Gmailリソースの使用量を表す抽象的な測定単位である割り当て単位で識別されます。

たとえば、メッセージの送信は割り当て単位100を消費しますが、メッセージの取得や下書きの作成などの他のほとんどのアクションは、はるかに少ない割り当て単位を消費します。

GmailのSMTPアクセスには、不正使用を防ぎ、サービスの可用性を確保するための厳しい制限があります。通常これらの制限はGmailのAPIの制限よりも低く、ユーザーが1日に送信できるメールの数が少なくなることがよくあります。

APIと同様に、SMTPサービスもメール添付ファイルのサイズが制限されています。メールの合計サイズ(本文とすべての添付ファイル)は25 MB以下にしなければなりません。

短期間にあまりにも多くの接続または認証試行が行われた場合、Gmailは接続をスロットリングし、一時的にさらにメールを送信する機能を制限する場合があります。これは、SMTPを介した潜在的なスパムや不正行為を特定し防止するためのGmailの取り組みの一環です。

Gmailのメールインフラストラクチャに代わるものはありますか?

簡単にいうと、あります。

GmailのSMTPサーバーを使ってメールを送る以外に、代替手段は多数あり、ご自由に他のメールプロバイダーをお選びいただけます。ただし、そのサーバーインフラストラクチャがあなたの要件とニーズを満たしていることを確認することが重要です。

他のオプションとしては、サードパーティーのサーバー経由でお使いのアプリケーションからメールを送信できるAPIを提供するメールサービスプロバイダーの使用も一案です。この場合、アプリにメール送信機能を実装する前に必ずテストしましょう。

この面で、Mailtrapのメール配信システムは大いに有効です。

Mailtrapのシステムは、メールインフラストラクチャをより詳細に制御しながらメールを配信できるメール配信API/SMTPサービスと、送信前にそれらのメールをテストおよびデバッグするツールとしてメールサンドボックスを提供しています。

PythonアプリでMailtrapのメール配信APIをお使いになりたい場合は、ドメイン名を認証した後、Sending Domains  (送信ドメイン) セクションに移動し、API and SMTP  (APIとSMTP) タブを選択します。ドロップダウンメニューからPythonを選択し、生成されたコードと認証情報をスクリプトにコピー&ペーストします。

ヒント MailtrapのPython SDKに関する公式GitHubドキュメントをご参照ください。

import requests

url = "https://send.api.mailtrap.io/api/send"

payload = "{\"from\":{\"email\":\"mailtrap@mailtrap.club\",\"name\":\"Mailtrapテスト\"},\"to\":[{\"email\":\"受信者@サンプル.com\"}],\"subject\":\"素晴らしいですね!\",\"text\":\"Mailtrapのテストメール送信おめでとうございます!\",\"category\":\"連携テスト\"}"
headers = {
  "Authorization": "Bearer 48d3783bde8152*******************",
  "Content-Type": "application/json"
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

SMTP方式を選択し、アプリから関連する設定をコピーすることもできます。送信したいメールの種類に応じて、正しい送信ストリーム(トランザクションまたは一斉送信メール)をお選びください。

以下に例を示します。

import smtplib
from email.mime.text import MIMEText

# メールのコンテンツと認証情報を定義します
subject = "メールの件名"
body = "これはメールの本文です。"
sender_email = "送信者@gmail.com"
receiver_email = "受信者@gmail.com"
password = "実際のパスワード"  # コード内のパスワードにはご注意ください!

# MIMETextオブジェクトを作成します
message = MIMEText(body)
message['Subject'] = subject
message['From'] = sender_email
message['To'] = receiver_email

# MailtrapのSMTPサーバーに接続します
with smtplib.SMTP('live.smtp.mailtrap.io', 587) as server:  # STARTTLSにはポート587を使うことに注意
    server.ehlo()  # オプションで呼び出せます (接続後に自動的に呼び出されます)
    server.starttls()  # 接続を保護します
    server.ehlo()  # オプションで呼び出せます (STARTTLS後にサーバーに再識別します)
    server.login(sender_email, password)
    server.send_message(message)  # メールを送信します

    print("メールが正常に送信されました!")

ステージング環境でのメールとメール送信テスト

メールの有効性のテストは、メールが正常に配信され、適切にフォーマットされていることを確認するために不可欠です。

メールサンドボックスには、まさにそれを行うのに役立つさまざまな機能が搭載されています。SMTPトラフィックをキャプチャすることで、スパムスコアについてメールコンテンツを分析し、HTML/CSSを検証し、生データを確認するなど、多くのことを行えるので、確実にメールが適切にフォーマットされ、正常に配信されるようになります。

ここでは、Mailtrapのメール送信テストツールを使って、SMTPまたはAPIを介してサンドボックスを活用するやり方を解説していきます。

SMTP

Mailtrapのメール送信テストは、数回のクリックでPythonアプリに簡単に統合できます。必要な作業としては、アプリによって生成されたSMTP認証情報をコピーしてコードに貼り付けるだけです。

次に、Integrations (連携) の下にある利用可能なPythonコードサンプルの1つを選び、実行してテストの動作を確認します。もちろんデフォルトのコード例はニーズに合わせて調整できます。

API

QAテストフローを自動化し、テストをより詳細に制御したい場合は、Mailtrapのメール送信テストAPIが最適です。

ここでは、既にユーザーであることを前提として、すべてを設定する方法をお見せします。詳細は当社の公式APIドキュメントでご確認ください。

import http.client
import json

def test_send_email():
    conn = http.client.HTTPSConnection("sandbox.api.mailtrap.io")
   
    payload = {
        "to": [{"email": "tanaka_akira@サンプル.com", "name": "田中あきら"}],
        "cc": [{"email": "suzuki_yuu@サンプル.com", "name": "鈴木優"}],
        "bcc": [{"email": "sakurai_ryo@サンプル.com", "name": "桜井稜"}],
        "from": {"email": "sales@サンプル.com", "name": "営業部"},
        "attachments": [
            {
                "content": "ここにbase64エンコードされたコンテンツを挿入",
                "filename": "index.html",
                "type": "text/html",
                "disposition": "attachment"
            }
        ],
        "custom_variables": {"user_id": "45982", "batch_id": "PSJ-12"},
        "headers": {"X-Message-Source": "dev.mydomain.com"},
        "subject": "ご注文の確認(例)",
        "text": "ご注文いただきありがとうございます。",
        "category": "APIテスト"
    }

    headers = {
        'Content-Type': "application/json",
        'Accept': "application/json",
        'Api-Token': "ここに実際のAPIトークンを挿入"
    }

    # ペイロードをJSON文字列に変換します
    json_payload = json.dumps(payload)

    # POSTリクエストを作成します
    conn.request("POST", "/api/send/ここに実際の受信箱IDを挿入", json_payload, headers)  # Replace 'inbox_id' with your real inbox ID

    # レスポンスを取得します
    response = conn.getresponse()
    data = response.read()

    print(data.decode("utf-8"))

if __name__ == "__main__":
    test_send_email()

上記のスクリプトは、http.client.HTTPSConnectionを介してMailtrapのメール送信テストAPIに接続されます。件名、テキストコンテンツ、受信者などを含むメールのコンテンツはJSONペイロードとして定義されます。そして、設定したペイロードでPOSTリクエストが行われます。

プロからのヒント

まとめ

アプリを使ってメール送信機能を開発するのに本記事が少しでもお役に立てば幸いです!ただ、構築を始める前に、どのPythonフレームワークを使うかを必ず調べるようにしましょう。それぞれ独自の機能と利点があるので、ご自身に合うものをお選びください。

モバイルバージョンを終了