DBILITY

python 메일보내기 본문

python

python 메일보내기

DBILITY 2021. 8. 19. 17:24
반응형

smtplib 사용

별도로 sendmail server를 구축하고, dns mx record 등록하는 등 작업이 필요하겠지만, 언제 다하겠나 생각도 안남

회사나 gmail smtp를 사용해도 된다.

gmail은 다음과 같은 SMTPAuthenticationError가 발생한다.

smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. 
Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials k9sm4572812pfu.109 - gsmtp')

예전에 javamail로는 PasswordAuthentication을 처리하면 됐던거 같던데 지금은 모르겠다.

굳이 Gmail을 통해 보내야 한다면 Google계정 -> 보안 -> 보안 수준이 낮은 앱 액세스에서 사용으로 설정한다.

 Google IMAP정보는 다음과 같다.

  • plain text
    import smtplib
    from email.mime.text import MIMEText
    
    mail_text = 'python send mail'
    mail_msg = MIMEText(mail_text)
    
    mail_msg['Subject'] = 'python mail test'
    mail_msg['From'] = '보내는주소'
    mail_msg['To'] = '받는주소'
    
    print(mail_msg.as_string())
    
    smtp = smtplib.SMTP('메일서버주소', 25)
    #smtp.set_debuglevel(True)
    
    #smtp.ehlo()
    smtp.starttls()
    #smtp.ehlo()
    smtp.login('사용자아이디', '비밀번호')
    smtp.sendmail('보내는주소, '받는주소', mail_msg.as_string())
    smtp.quit()
    smtp.close()​
  • html
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    mail_msg = MIMEMultipart('alternative')
    mail_html = """<h1>python send mail</h1>
                <p>hello~~</p>
                """
    mail_msg.attach(MIMEText(mail_html, 'html'))
    
    mail_msg['Subject'] = 'python mail test html'
    mail_msg['From'] = '보내는주소'
    mail_msg['To'] = '받는주소'
    
    print(mail_msg.as_string())
    
    smtp = smtplib.SMTP('메일서버주소', 25)
    #smtp.set_debuglevel(True)
    
    #smtp.ehlo()
    smtp.starttls()
    #smtp.ehlo()
    smtp.login('사용자아이디', '비밀번호')
    smtp.sendmail('보내는주소, '받는주소', mail_msg.as_string())
    smtp.quit()
    smtp.close()​
  • file attach
    import os
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.base import MIMEBase
    from email.mime.multipart import MIMEMultipart
    from email import encoders
    
    mail_text = 'python send mail'
    mail_msg = MIMEMultipart()
    
    mail_msg['Subject'] = 'python mail test'
    mail_msg['From'] = '보내는주소'
    mail_msg['To'] = '받는주소'
    
    mail_msg.attach(MIMEText(mail_text, 'plain', 'utf-8'))
    print(mail_msg.as_string())
    
    # file read
    file_path = r'.\images\photo1.jpg'
    with open(file_path, 'rb') as attach_file:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(attach_file.read())
    
    # base64 encoding
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename={}'.format(os.path.basename(file_path)))
    
    mail_msg.attach(part)
    smtp = smtplib.SMTP('메일서버주소', 25)
    # smtp.set_debuglevel(True)
    
    # smtp.ehlo()
    smtp.starttls()
    # smtp.ehlo()
    smtp.login('아이디', '비밀번호')
    smtp.sendmail('보내는주소', '받는주소', mail_msg.as_string())
    smtp.quit()
    smtp.close()
     다음과 같이 첨부포함 도착


반응형
Comments