-
-
Save chrisswanda/57fbc7c587f76d8437880657c0893009 to your computer and use it in GitHub Desktop.
import smtplib | |
#email.mime.multipart is specific to python3 | |
from email.mime.multipart import MIMEMultipart | |
from email.mime.text import MIMEText | |
msg = MIMEMultipart() | |
msg['From'] = '[email protected]' | |
msg['To'] = '[email protected]' | |
msg['Subject'] = 'Subject' | |
message = 'Message body' | |
msg.attach(MIMEText(message)) | |
mailserver = smtplib.SMTP('smtp.mail.me.com', 587) | |
# identify ourselves | |
mailserver.ehlo() | |
# secure our email with tls encryption | |
mailserver.starttls() | |
# re-identify ourselves as an encrypted connection | |
mailserver.ehlo() | |
mailserver.login('iCloud ID', 'app-specific password') | |
mailserver.sendmail('[email protected]', | |
'[email protected]', msg.as_string()) | |
mailserver.quit() |
Also the sent email is not stored in the Sent Mailbox. How can we achieve that?
Hi Chris, I was trying to use the script without importing MIMEMultipart. But I was getting an error as "smtplib.SMTPDataError: (550, b'5.7.0 From address is not one of your addresses')". But after using with MIMEMultipart the code worked like charm. Can you help me understand how this is working and not getting an error.
I believe it is due to the from
and to
addresses must be provided as part of the message body for iCloud to send the message out.
Also the sent email is not stored in the Sent Mailbox. How can we achieve that?
I think you would use imaplib
.
Append message to named mailbox.```
```import imaplib
from email.message import Message
from time import time
connection = imaplib.IMAP4_SSL(HOSTNAME)
connection.login(USERNAME, PASSWORD)
new_message = Message()
new_message["From"] = "[email protected]"
new_message["Subject"] = "My new mail."
new_message.set_payload("This is my message.")
connection.append('INBOX', '', imaplib.Time2Internaldate(time()), str(new_message).encode('utf-8'))```
Hi Chris, do you have any IMAP script as well? Im trying to receive iCloud mails with a python script but it doesn't work. All tutorials use gmail.
I do not. But if you are using a Google example, I would imagine using iCloud's IMAP settings should work also.
# Connect to the iCloud IMAP Mail Server
imap.put_Ssl(True)
imap.put_Port(993)
success = imap.Connect("imap.mail.me.com")
if (success != True):
print(imap.lastErrorText())
sys.exit()
# The username is usually the name part of your iCloud email address
# (for example, emilyparker, not [email protected]).
success = imap.Login("ICLOUD_USERNAME","ICLOUD_PASSWORD")
if (success != True):
print(imap.lastErrorText())
sys.exit()
I get to the point to actually download a list with all email and am able to read the UIDs but the emails don't contain anything. In all the gmail examples its as easy a calling the fetch method and getting the email with all its payload.
Sorry for not pointing this out in the first place.
Maybe try something like this?
# Once the folder/mailbox is selected, the NumMessages property
# will contain the number of emails in the mailbox.
# Loop from 1 to NumMessages to fetch each email by sequence number.
n = imap.get_NumMessages()
bUid = False
for i in range(1,(n)-1):
# Download the email by sequence number.
email = imap.FetchSingle(i,bUid)
if (imap.get_LastMethodSuccess() != True):
print(imap.lastErrorText())
sys.exit()
print(str(i) + ": " + email.ck_from())
print(" " + email.subject())
print("-")
# Disconnect from the IMAP server.
success = imap.Disconnect()
What example did you use?
.get_NumMessages is not an IMAP4 command for me.
Exception has occurred: AttributeError
Unknown IMAP4 command: 'get_NumMessages'
File "/Users/lars/Desktop/Test/Test-Env/src/email.py", line 25, in
n = mail.get_NumMessages()
Hi Chris, I was trying to use the script without importing MIMEMultipart. But I was getting an error as "smtplib.SMTPDataError: (550, b'5.7.0 From address is not one of your addresses')". But after using with MIMEMultipart the code worked like charm. Can you help me understand how this is working and not getting an error.