pydantic の EmailStr を使用したバリデーションチェックは
https://github.com/JoshData/python-email-validator
が使用されているのだが、EmailStrは、
"名称" <address@domain>
の形式を受け付けてくれる。
from pydantic import BaseModel, EmailStr, ValidationError class MyModel(BaseModel): email :EmailStr try: model = MyModel(name="ABC", email='"AAA" <aaa123@sample.com>') print(f'model.email = {model.email}') except ValidationError as e: print(e)
これは例外にならず、 print(f'model.email = {model.email}') の結果は、
model.email = aaa123@sample.com
とメールアドレスを期待どおりに参照できる。
一見この sample.com はあり得ないと思いますが、実はダミーURLなので、OKになってしまいます。
email_validator の validate_email を使用すると、
email='"AAA" <aaa123@sample.com>'
という書き方は許されず、さらにドメインが有効かもチェックしてくれる。
from email_validator import validate_email, EmailNotValidError, EmailUndeliverableError targetmail = 'aaa123@sample.com' try: emailinfo = validate_email(targetmail) # email = emailinfo.normalized except EmailUndeliverableError as e: print(e) except EmailNotValidError as e: print(e)