Yes I want to send an automatic email by attaching a file with out smtp
server
Nesse caso, eu usaria o Python (e já fiz isso no passado, embora não com anexos). Enviar e-mail com o Python está a apenas alguns import
.
Aqui abaixo está um exemplo que eu juntei rapidamente agora, usando um endereço do Gmail:
#!/usr/bin/env python3
import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# Your login credentials
sender = "[email protected]"
emailPasswd = "yourpassword"
# Who are we sending to
receiver = "[email protected]"
# The path to the file we want to attach
fileToAttach = "att.txt"
msg = MIMEMultipart()
msg['Subject'] = "Here's an e-mail with attachment"
msg['From'] = sender
msg['To'] = receiver
body = "Mail with attachment"
bodyText = MIMEText(body, "plain")
# Now we try to add the attachment
try:
att = open(fileToAttach)
attachment = MIMEText(att.read())
attachment.add_header('Content-Disposition', 'attachment', filename=fileToAttach)
except IOError:
print("Could not add attachment {}".format(fileToAttach))
exit(1)
# "Attach" both the attachment and body to 'msg'
msg.attach(bodyText)
msg.attach(attachment)
# Connect and send e-mail
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.login(sender, emailPasswd)
server.sendmail(sender, receiver, msg.as_string())
server.quit()
Isso funciona, mas não antes de você ter este . Se você não permitir que "aplicativos menos seguros acessem sua conta [Gmail]", você não conseguirá fazer login usando um script. Em vez disso, você receberá um SMTPAuthenticationError
(código de erro 534
). Veja aqui para uma boa referência.
Agora, talvez seja desnecessário ressaltar, mas farei de qualquer maneira; meu pequeno snippet de código acima funciona para txt
attachments. Se você deseja anexar uma imagem, por exemplo, você terá que importar o módulo correspondente: from email.mime.image import MIMEImage
Além disso, se você não quiser "codificar" o arquivo anexado, pode simplesmente passá-lo como um argumento. Se o script for chamado de ./pySmtp.py
, chame da seguinte forma:
./pySmtp.py att.txt
Se sim, altere o código para isso:
#!/usr/bin/env python3
import sys
import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# Your login credentials
sender = "[email protected]"
emailPasswd = "yourpassword"
# Who are we sending to
receiver = "[email protected]"
# The path to the file we want to attach
fileToAttach = sys.argv[1]
[rest of code stays the same]
Quanto à parte "automática", você terá que escolher você mesmo dependendo de suas necessidades.