[python] M2Crypto를 사용하여 S/MIME 암호화된 이메일을 보내는 방법은 어떻게 되나요?
  1. 먼저 M2Crypto를 설치합니다.

    pip install M2Crypto
    
  2. 다음, 발신자의 개인 키와 인증서 파일을 읽어옵니다.

    from M2Crypto import SMIME, BIO
    
    # 발신자의 개인 키와 인증서 파일 경로
    key_file = 'path_to_sender_private_key.pem'
    cert_file = 'path_to_sender_certificate.pem'
    
    # 개인 키와 인증서를 읽어옴
    key = open(key_file, 'rb').read()
    cert = open(cert_file, 'rb').read()
    
  3. 수신자의 공개 키를 획득하여 이를 이용해 암호화합니다.

    # 수신자의 공개 키
    recipient_cert_file = 'path_to_recipient_certificate.pem'
    recipient_cert = open(recipient_cert_file, 'rb').read()
    
    # 암호화
    s = SMIME.SMIME()
    s.load_key(key, cert)
    x509 = BIO.MemoryBuffer(recipient_cert)
    sk = X509.X509_Stack()
    sk.push(X509.load_cert(recipient_cert))
    s.set_x509_stack(sk)
    p7 = s.encrypt(BIO.MemoryBuffer('Hello, encrypted email!'), flags=SMIME.PKCS7_TEXT)
    
  4. 마지막으로, 이메일을 보냅니다.

    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email import encoders
    
    # 이메일 구성
    msg = MIMEMultipart()
    msg['From'] = 'sender@example.com'
    msg['To'] = 'recipient@example.com'
    msg['Subject'] = '암호화된 이메일'
    
    # 암호화된 내용을 이메일에 추가
    part = MIMEBase('application', 'octet-stream')
    part.set_payload(p7.pprint())
    encoders.encode_base64(part)
    part.add_header('Content-Disposition', 'attachment; filename="encrypted.p7"')
    msg.attach(part)
    
    # SMTP 서버에 연결하여 이메일 전송
    smtp_server = 'smtp.example.com'
    smtp_port = 25
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.sendmail('sender@example.com', 'recipient@example.com', msg.as_string())
    server.quit()
    

이렇게하면 M2Crypto를 사용하여 S/MIME 암호화된 이메일을 보낼 수 있습니다.