Да, я хочу отправить автоматическое электронное письмо, прикрепив файл без SMTP сервера
В этом случае я бы использовал Python (и h сделано в прошлом, правда, не с навесным оборудованием). Отправка электронной почты с помощью Python - это всего лишь пара
import
.Вот один пример, который я быстро собрал только что, используя адрес 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 = "you@gmail.com" emailPasswd = "yourpassword" # Who are we sending to receiver = "whoever@someplace.com" # 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()
Это работает, но только после того, как вы сделаете это .Если вы не разрешите «менее безопасным приложениям получать доступ к вашей учетной записи [Gmail]», вы не сможете войти в систему с помощью скрипта. Вместо этого вы получите
SMTPAuthenticationError
(код ошибки534
). См. здесь для хорошей справки.Теперь, возможно, излишне напоминать, но я все равно сделаю это; мой небольшой фрагмент кода выше работает для вложений
txt
. Например, если вы хотите прикрепить изображение, вам нужно будет импортировать соответствующий модуль:from email.mime.image import MIMEImage
Кроме того, если вы не хотите «жестко кодировать» прикрепленный файл, вы можете просто передать его как аргумент. Если сценарий называется
./ pySmtp.py
, назовите его так:./pySmtp.py att.txt
Если да, измените код на этот:
#!/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 = "you@gmail.com" emailPasswd = "yourpassword" # Who are we sending to receiver = "whoever@someplace.com" # The path to the file we want to attach fileToAttach = sys.argv[1] [rest of code stays the same]
Что касается «автоматической» части, вам нужно будет выбрать что сами в зависимости от ваших потребностей.
Единственное отличие состоит в том, что первая команда,
cp -R /a/. /b
скопирует скрытые файлы и каталоги из /a
в /b
, а вторая команда
cp -R /a/* /b
не стал бы этого делать.
Причина того, что вторая команда не копирует скрытые файлы, заключается в том, что *
заменяется на все не -скрытые имена в /a
(, если только параметр оболочки dotglob
не установлен в bash
или эквивалентный опция в любой используемой оболочке, если она доступна ).
В исходном вопросе во второй команде использовалось -r
вместо-R
:
Флаг -r
сохраняется в некоторых реализацияхcp
(GNU cp
, например )для обратной совместимости. Это нестандартный флаг -для команды cp
, и в реализации, в которой он есть, он аналогичен на -R
.
В GNU и AIX cp
, -r
и -R
одинаковы. В некоторых исторических реализациях cp
специальные файлы, такие как FIFO и сокеты, обрабатываются по-разному. Реализация cp -r/-R
в Solaris отличается только тем, что FIFO(-R
воссоздает их, -r
читает из них ). Ни одна из бесплатных BSD не имеет -r
в своих реализациях cp
.
cp -R
копирует рекурсивно и копирует исходный тип файла. Это единственный рекурсивный метод, упомянутый в стандарте POSIX.
cp -r
— исторический вариант рекурсивного копирования. Он открывает все файлы и читает содержимое, а затем создает простые файлы с прочитанным содержимым. Это исторический рекурсивный вариант UNIX. Он может быть недоступен в современных реализациях.
См.http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cp.htmlсправочную страницу POSIX.