|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Отправить письмо с вложением. |
|
|
CMD/BAT - [решено] Отправить письмо с вложением.
|
![]() Пользователь Сообщения: 124 |
Как можно реализовать сабж, с использованием CMD.
Без использования сторонних программ - утилит. Возможно использование PowerShell. Суть такова: Есть bat файл, который ведет лог своей работы и в конце работы делает call Send-Log-Email.bat Send-Log-Email.bat должен отправить на почту лог предидущего бат файла. Как реализовать в бат файле отправку письма с вложением? |
|
------- Отправлено: 17:13, 20-11-2009 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Отправлять почту через батик никогда не пробовал - слишком часто там приходится следить за ответом сервера, находясь в оболочке телнета.
Лично для себя - отправляю логи через ftp (есть у многих хостеров с бесплатной почтой). Могу поделиться одним из: Батник на удаленном объекте по Шедулу паковал архив с некой базой и логом и отправлял его на ftp сервер (используется до сих пор). В главном офисе другой батник (также по Шедулу, но на пару часов позже) скачивал и распаковывал архив. При необходимости апдейта версии или прочих "действиях" на удаленном объекте, батник поддерживает передачу 2х файлов - один из них батник апдейта, а другой - некоторые данные, например архив. Пересылка @Echo Off echo MyLogin>SendBase.ftp echo MyPassword>>SendBase.ftp echo binary>>SendBase.ftp echo delete MyBase.rar>>SendBase.ftp echo send MyBase.rar>>SendBase.ftp echo recv UpDate._>>SendBase.ftp echo delete UpDate._>>SendBase.ftp echo recv UpDate.upd>>SendBase.ftp echo delete UpDate.upd>>SendBase.ftp echo bye>>SendBase.ftp set DB=\\DataServer\MyBase\ set RAR="C:\Program Files\WinRAR\WinRAR.exe" echo ========== %Date% %Time% ==========>>%DB%MyBase.log del /Q MyBase.rar>>%DB%MyBase.log %RAR% a -r -dh -m5 -mdg MyBase.rar %DB%*.*>>%DB%MyBase.log ftp -i -s:SendBase.ftp ftp.MyFtpServer>>%DB%MyBase.log del /Q SendBase.ftp if not exist UpDate._ goto End echo Starting UpDate module>>%DB%MyBase.log del /Q UpDate.bat>nul copy /y UpDate._ UpDate.bat>>%DB%MyBase.log del /Q UpDate._>nul UpDate.bat :End echo.>>%DB%MyBase.log echo.>>%DB%MyBase.log Работа с почтовым ящиком через Telnet. Чтобы немножко разобраться какие команды дает Ваш почтовый клиент pop/smtp-серверу при отправке/получение почты, я написал эту статью. Теперь я хочу добавить, что протокол POP использует 110 порт, а SMTP - 25. Где же вводить команды и какие команды? Команды можно вводить в любой телнет-программе, я опишу как это можно сделать с помощью встроенной в Windows программы Telnet. Чтобы вызвать эту программу выполните следующие действия: зайдите в меню "ПУСК", затем "Выполнить" и набираете "telnet". В результате Вы видите перед собой такой экран: Теперь заходите в раздел меню "Подключение(Подключить)" и выбираете пункт меню "Удаленная система". Появилось новое окно: В него вводите адрес сервера, порт вписываете тот что Вам нужен, еще раз напомню: POP - 110 порт - чтение почты SMTP - 25 порт - оправка почты Тип терминала оставляете - vt100. И жмите на кнопку "Подключить". Работа с POP(110 порт) по Telnetу. Появляется приглашение сервера и Вы вводите логин и пароль, ввод производится следующим образом: набираете "USER логин", затем вводите пароль: "PASS пароль". Тут появляется проблема, пароль отображается на экране в том же виде в котором Вы его вводите, а значит любой человек, который находится рядом сможет увидеть Ваш пароль. Что же надо сделать что бы не было видно пароля при вводе? Просто заходите в пункт меню "Терминал", дальше в раздел "Параметры" и убираете там галку напротив "Отображение ввода", и теперь спокойно вводите пароль, только не забудьте после ввода пароля галочку поставить обратно. Команды возможно выполнять подключившись к серверу по POP: STAT Запрашивает и выводит информацию о количестве непрочитанных сообщений и их размер в байтах. RETR n Показывает сообщение номер n. DELE n Удаляет сообщение номер n. LAST Запрашивает номер последнего прочитанного сообщения. LIST (n) Запрашивает информацию о размере сообщения номер n или о размере всех сообщений.. RSET Восстанавливает удаленные сообщения и устанавливает счетчик сообщений в 1. TOP n Печатает заголовок и первую строку сообщения n. NOOP Режим ожидания. HELP Вывод помощи и используемых команд. QUIT Завершение сеанса. Работа с SMTP(25 порт) по Telnetу или отправка почты. После подключения к серверу Вам не надо вводить логин и пароль как при подключение по POP, аутентификация происходит после того как Вы "приветствуете" сервер командой "HELO сервер отправителя", иногда сервер индетифицирует пользователя по команде "MAIL from: e-mail-адрес отправителя". Следующей командой Вы определяете получателя - "RCPT to: адрес@получателя". После того как системе стал известен оправитель и получатель можно начать писать свое сообщение. Начало сообщения задается командой "DATA" без параметров, потом Вы вводите текст сообщения, закончить надо вводом "." и нажатием за ней клавиши "Enter" на новой строчке. Все, сообщение отправлено! А вот список команд, которые можно выполнять на сервере, подключившись к нему по SMTP: HELO сервер-отправитель Идентифицирует SMTP-сервер отправителя. MAIL FROM адрес@отправителя Задает адрес отправителя. RCPT TO: адрес@получателя Задает адрес получателя. DATA Указывает на начало сообщения. Для окончания сообщения указывается (.). RSET Прерывает передачу сообщения. VRFY email@адрес Проверяет существование почтового ящика, но на большинстве эта опция закрыта или выполняется автоматически при вводе команды: "RCPT to: адрес@получателя" . EXPN <> Запрашивает список адресов электронной почты. HELP Запрашивает online-помощь. Выводит описание команд, реализованных в системе. QUIT Завершает SMTP-сеанс. Cписок ответов, возращаемых сервером при подключении по SMTP: 211 Статус системы 214 Сообщение помощи 220 Сервер готов к выполнению команд 221 Закрытие канала передачи 250 Требуемые действия, выполнены успешно 251 Не локальный пользователь; отправить по заданному пути 354 Приглашение ввести текст сообщения и по завершению письма ввести "." на новой строчке и нажать Enter 421 Не предусмотрено системой и закрытие канала 450 Команда не выполнена по причине занятости ящика 451 Требуемое действие прервано из-за локальной ошибки 452 Требуемое действие не выполнено из-за недостатка ресурсов 500 Синтаксическая ошибка, команда не распознана 501 Синтаксическая ошибка в параметрах 502 Команда не выполнена 503 Неправильная последовательность команд 504 Параметры команды не выполнены 550 Действия не выполнены, ящик не доступен 551 Пользователь не локальный; пожалуйста попробуйте этот путь 552 Действие прервано из-за превышения объема 553 Требуемое действие прервано: неправильно введено имя ящика 554 Задание не выполнено |
Отправлено: 19:48, 20-11-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата uptk:
$emailFrom = "user@yourdomain.com" $emailTo = "user@yourdomain.com" $subj = "your subject" $body = "your body" $file = "c:\file.txt" $smtpServer = "your smtp server" $att = new-object Net.Mail.Attachment($file) $smtp = new-object Net.Mail.SmtpClient($smtpServer) $msg = new-object Net.Mail.MailMessage $msg.From = $emailFrom $msg.To.Add($emailTo) $msg.Subject = $subj $msg.Body = $body $msg.Attachments.Add($att) $smtp.Send($msg) $att.Dispose() |
|
Отправлено: 09:14, 22-11-2009 | #3 |
Пользователь Сообщения: 72
|
Профиль | Сайт | Отправить PM | Цитировать Быть может Вам подойдет не PowerShell, а VBS/WSH? Вот тут пример есть: Примеры скриптов для администрирования
Скрипт сжимает указанную папку с логами и отправляет по указанному адресу. Недостатки решения: - использование внешней утилиты сжатия 7z.exe; - необходимость Exchange server в организации. ' === Script Information Header === ' Script Name: SendArchive.vbs ' Date: 19.10.09 ' Author: Виталий Бочкарев ' Description: Скрипт сжатия папки и отправки архива по почте ' === Initialization Block === Option Explicit On Error Resume Next Dim mWorkDir, mCommand Dim oShell, oFSO, oEmail Const mFolderToCompress = "C:\Test Folder\*" Const mArhiveName = "Attachment.zip" Const mFrom = "script@domain.com" Const mTo = "user@domain.com" Const mSubject = "Letter Subject" Const mTextBody = "Look the attachment." Const mSMTPServer = "mail.domain.com" Const mSMTPport = 25 ' ==== Script Main Logic ==== ' Создание объекта оболочки Set oShell = CreateObject("WScript.Shell") ' Создание объекта файловой системы Set oFSO = CreateObject("Scripting.Filesystemobject") ' Создание объекта почтового сообщения Set oEmail = CreateObject("CDO.Message") ' Получение рабочей директории скрипта mWorkDir = Left(WScript.ScriptFullName,Len(WScript.ScriptFullName)-Len(WScript.ScriptName)) ' Составление команды для упаковки указанной директории mCommand = """" & mWorkDir & "7z.exe""" & " a -y " & """" & mWorkDir & mArhiveName _ & """ """ & mFolderToCompress & """" ' Упаковка директории Call oShell.Run(mCommand, 0, True) ' Составление почтового сообщения oEmail.From = mFrom oEmail.To = mTo oEmail.Subject = mSubject oEmail.Textbody = mTextBody ' Прикрепление архива к сообщению Call oEmail.AddAttachment(mWorkDir & mArhiveName) ' Настройка почтового канала oEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/" & _ "cdo/configuration/sendusing") = 2 oEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/" & _ "cdo/configuration/smtpserver") = mSMTPServer oEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/" & _ "cdo/configuration/smtpserverport") = mSMTPport oEmail.Configuration.Fields.Update ' Отправка сообщения oEmail.Send WScript.Sleep 300 ' Удаление архива Call oFSO.DeleteFile(mWorkDir & mArhiveName, True) |
------- Последний раз редактировалось vitaliyboch, 16-12-2009 в 07:54. Отправлено: 08:31, 23-11-2009 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата vitaliyboch:
- тут отправка по SMTP, не вижу необходимости в Exchange. |
||
Отправлено: 08:58, 23-11-2009 | #5 |
![]() Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать Цитата amel27:
имя файла выглядит, так подскажите, как передать в скрипт PowerShell-a, подобное имя? |
|
------- Отправлено: 17:33, 23-11-2009 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата uptk:
|
|
Отправлено: 05:45, 24-11-2009 | #7 |
![]() Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать Как использовать авторизацию на почтовом сервере?
Можно использовать почтовый сервер для отправки без авторизации, но он находится в другой сети и не всегда может быть доступен. А почтовый сервер, который находиться в одной сети с машиной на которой это будет работать, требует авторизации. Подскажите как прикрутить авторизацию в скрипте. |
------- Отправлено: 10:32, 24-11-2009 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата uptk:
|
|
Отправлено: 11:04, 24-11-2009 | #9 |
![]() Пользователь Сообщения: 124
|
Профиль | Отправить PM | Цитировать Цитата amel27:
Исправил на вот такое С авторизацией попробую, отпишусь. |
|
------- Отправлено: 11:38, 24-11-2009 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Как отправить письмо с вложением? | CyberStyLe | AutoIt | 5 | 10-02-2010 06:26 | |
[решено] не могу с одного ящика отправить письмо на один ящик | asci | Хочу все знать | 7 | 22-10-2009 13:01 | |
как отправить письмо? | AnGel_of_Death | Хочу все знать | 6 | 06-06-2006 23:50 | |
Не отправить письмо через mail.ru | Anatoly Belov | Хочу все знать | 2 | 07-03-2006 13:56 | |
Как беспомощи PHP и Perl отправить письмо с прикрепленным фа | Xcode | Программирование и базы данных | 3 | 20-11-2003 19:33 |
|