import smtplib
import os
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email import encoders
from typing import Tuple, Optional
PROVIDERS = {
"verizon": {"sms": "vtext.com", "mms": "vtext.com"},
"tmobile": {"sms": "tmomail.net", "mms": "tmomail.net"},
"att": {"sms": "txt.att.net", "mms": "mms.att.net"},
"sprint": {"sms": "messaging.sprintpcs.com", "mms": "messaging.sprintpcs.com"},
}
class MMSSender:
def __init__(self, sender_email: str, password: str, smtp_server: str = "smtp.gmail.com", port: int = 465):
self.sender_email = sender_email
self.password = password
self.smtp_server = smtp_server
self.port = port
def send_mms(self, number: str, message: str, file_path: str, provider: str,
mime_maintype: str = "image", mime_subtype: str = "jpeg",
subject: str = "Sent using Python MMS") -> bool:
"""
发送 MMS 消息
Args:
number: 手机号码
message: 消息正文
file_path: 本地文件路径
provider: 运营商标识 (如 'verizon', 'tmobile')
mime_maintype: 主类型 (如 'image', 'application')
mime_subtype: 子类型 (如 'jpeg', 'pdf')
subject: 邮件主题
Returns:
bool: 发送是否成功
"""
try:
if provider not in PROVIDERS:
raise ValueError(f"Unsupported provider: {provider}")
gateway_domain = PROVIDERS[provider].get("mms") or PROVIDERS[provider].get("sms")
receiver_email = f"{number}@{gateway_domain}"
msg = MIMEMultipart()
msg["Subject"] = subject
msg["From"] = self.sender_email
msg["To"] = receiver_email
text_part = MIMEText(message, "plain")
msg.attach(text_part)
if os.path.exists(file_path):
with open(file_path, "rb") as attachment:
part = MIMEBase(mime_maintype, mime_subtype)
part.set_payload(attachment.read())
encoders.encode_base64(part)
filename = os.path.basename(file_path)
part.add_header(
"Content-Disposition",
f"attachment; filename=\"{filename}\""
)
msg.attach(part)
else:
print(f"Warning: File not found at {file_path}")
server = smtplib.SMTP_SSL(self.smtp_server, self.port)
server.login(self.sender_email, self.password)
server.sendmail(self.sender_email, receiver_email, msg.as_string())
server.quit()
return True
except Exception as e:
print(f"Error sending MMS: {e}")
return False
if __name__ == "__main__":
SENDER_EMAIL = "[email protected]"
SENDER_PASSWORD = "your_app_password"
PHONE_NUMBER = "1234567890"
FILE_PATH = "./photo.jpg"
sender = MMSSender(SENDER_EMAIL, SENDER_PASSWORD)
success = sender.send_mms(
number=PHONE_NUMBER,
message="Hello! This is an MMS sent via Python.",
file_path=FILE_PATH,
provider="tmobile",
mime_maintype="image",
mime_subtype="jpeg"
)
if success:
print("MMS sent successfully.")
else:
print("Failed to send MMS.")