ホームページ  >  記事  >  バックエンド開発  >  Python で電子メールを送信するための SMTP の実装に関する詳細なチュートリアル

Python で電子メールを送信するための SMTP の実装に関する詳細なチュートリアル

高洛峰
高洛峰オリジナル
2017-02-15 14:24:581152ブラウズ

はじめに

ウェブサイトを検索すると、Python でメールを送信するためのチュートリアルがたくさん見つかりましたが、それらはすべて多くの原則について説明しており、その後、指定されたコードを使用してメールを送信するための実装コードを起動しました。常に成功しませんでした。これは詳細な環境のデバッグが不足していたことが原因でした。そのため、今日は環境のデバッグからコードの実装までの詳細なチュートリアルを提供したいと思います。あなたはまだ解決策を見つけるのに苦労していますが、それを効果的に解決できる人々からの助けを得ることができません。

SMTP プロトコル

まず SMTP (Simple Mail Transfer Protocol) について理解します。SMTP プロトコルは、メール配信エージェントが受信者のメール サーバーに電子メールを送信するために使用されます。 SMTP プロトコルは電子メールの送信にのみ使用でき、電子メールの受信には使用できません。ほとんどの電子メール送信サーバーは SMTP プロトコルを使用します。 SMTP プロトコルのデフォルトの TCP ポート番号は 25 です。

環境のデバッグ

前述したように、電子メールは SMTP プロトコルを使用して送信されるため、最初に送信者の電子メール アドレスで SMTP プロトコルが有効になっているかどうかを確認する必要があります。有効になっていない場合は、163.com の電子メール アドレスを使用しました。送信者の電子メール アドレスとして、次の図に示すように SMTP プロトコルを有効にします。

1. 以下に示すように、まず 163.com メールボックス (NetEase メールボックス) にログインします

Python で電子メールを送信するための SMTP の実装に関する詳細なチュートリアル

2. 上の機能バーに [

設定] オプションがあることを確認します。メールボックスで、このオプションをクリックし、ドロップダウン メニューから 「POP3/SMTP/IMAP」を選択します

3。下の図に示すように、上の 2 つの赤いボックスをオンにする必要があります。そうでない場合は、「有効にする」を選択してチェックを入れる必要があります。そうすると、下の赤いボックスに Python で電子メールを送信するための SMTP の実装に関する詳細なチュートリアル

が表示されます:

SMTP サーバー: smtp.163.com

Python で電子メールを送信するための SMTP の実装に関する詳細なチュートリアル実装コード

後上記の設定 環境をデバッグした後、以下のコードを実装できます。コードを記述するには、pycharm4.5.3 エディターを使用することをお勧めします。以下のコードは、python2.7 バージョンと python3.4 バージョンの両方のテストで使用できます。


#coding:utf-8  #强制使用utf-8编码格式
import smtplib #加载smtplib模块
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender='发件人邮箱账号' #发件人邮箱账号,为了后面易于维护,所以写成了变量
my_user='收件人邮箱账号' #收件人邮箱账号,为了后面易于维护,所以写成了变量
def mail():
  ret=True
  try:
    msg=MIMEText('填写邮件内容','plain','utf-8')
    msg['From']=formataddr(["发件人邮箱昵称",my_sender])  #括号里的对应发件人邮箱昵称、发件人邮箱账号
    msg['To']=formataddr(["收件人邮箱昵称",my_user])  #括号里的对应收件人邮箱昵称、收件人邮箱账号
    msg['Subject']="主题" #邮件的主题,也可以说是标题

    server=smtplib.SMTP("smtp.xxx.com",25) #发件人邮箱中的SMTP服务器,端口是25
    server.login(my_sender,"发件人邮箱密码")  #括号中对应的是发件人邮箱账号、邮箱密码
    server.sendmail(my_sender,[my_user,],msg.as_string())  #括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
    server.quit()  #这句是关闭连接的意思
  except Exception:  #如果try中的语句没有执行,则会执行下面的ret=False
    ret=False
  return ret

ret=mail()
if ret:
  print("ok") #如果发送成功则会返回ok,稍等20秒左右就可以收到邮件
else:
  print("filed") #如果发送失败则会返回filed

以下に示すように、送信が成功すると ok が返され、それ以外の場合は実行は失敗します。

Python で電子メールを送信するための SMTP の実装に関する詳細なチュートリアル視野を広げる

コードは使用できますが、私はプレイ中にコードをいじったり壊したりするのが大好きなので、疑問を解消するための知識ポイントをいくつか紹介します。

1. 上記のコードの最初の行には「#coding:utf-8」がありませんが、このコードを読んでいる多くの人はこの行にあまり注目していないと思います。コードの実装を行うには、-8 形式で十分です。Python ではこの行が非常に重要です。これは、Python2 バージョンで認識されるためです。デフォルトではASCIIエンコーディングになっているため、Pythonで中国語の文字が出現すると認識されず、表示されるエラーメッセージは以下の通りです:

Python で電子メールを送信するための SMTP の実装に関する詳細なチュートリアル

エラーメッセージ

例: ファイル "F:/python/s12/ pymail.py",line2SyntaxError:Non-ASCIIcharacter 'xe5'infileF:/python/s12/pymail.pyonline2,butnoencodingdeclared;seehttp://www.php.cn/

したがって、上記のエンコードエラーメッセージが表示される場合は、ページの最初の行に

を追加できます #coding:utf-8

#utf-8 にエンコードを強制する

または

#coding:GBK

#GBK にエンコードを強制する

上記は全体ですこの記事の内容が皆さんの学習に役立つことを願っています。また、PHP 中国語 Web サイトもサポートしてください。

SMTP を実装して Python で電子メールを送信する方法に関する詳細なチュートリアルについては、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。