2008-07-03 20:05
Kiedy mamy komuś przesłać plik, możemy niekiedy użyć do tego zwykłej poczty e-mail. Nie jest to oczywiście możliwe zawsze: plik nie powinien być zbyt duży i zwykle nie może też należeć do żadnego z “niebezpiecznych” typów (np. aplikacji EXE), by serwery pocztowe mogły go przepchnąć bez narażania lub zatykania sieci.
Jeśli w naszym przypadku tak jest, to możemy wykonać całą operację na przykład przy pomocy poniższego skryptu PowerShella:
# MailFile.ps1 - Wysyła podany plik e-mailem na podany adres
# Parametr: nazwa pliku lokalnego
param([string]$file = $(throw "File not specified"))
# Stałe
$SERVER = "moj.server.pl"
$LOGIN = "loginSmtp"
$PASSWORD = "hasłoSmtp"
$FROM_ADDRESS = "ja@server.pl"
# Odczytanie adresu docelowego
$recipentAddress = Read-Host -Prompt "Recipent e-mail address"
$recipent = New-Object Net.Mail.MailAddress @($recipentAddress)
# Złożenie maila
$mail = New-Object Net.Mail.MailMessage
$mail.From = New-Object Net.Mail.MailAddress @($FROM_ADDRESS)
$mail.To.Add($recipent)
$mail.Subject = (New-Object IO.FileInfo @($file)).Name
# Dodanie załącznika
$attachment = New-Object Net.Mail.Attachment @($file,
[Net.Mime.MediaTypeNames+Application]::Octet)
$cd = $attachment.ContentDisposition
$cd.CreationDate = [IO.File]::GetCreationTime($file)
$cd.ModificationDate = [IO.File]::GetLastWriteTime($file)
$cd.ReadDate = [IO.File]::GetLastAccessTime($file)
$mail.Attachments.Add($attachment)
# Łączenie z serwerem SMTP i wysłanie maila
$smtp = New-Object Net.Mail.SmtpClient @($SERVER)
$smtp.Credentials = New-Object Net.NetworkCredential @($LOGIN, $PASSWORD)
# $smtp.EnableSsl = $true # Odkomentowujemy, jeśli serwer wymaga SSL
$smtp.Send($mail)
Jak widać, nie jest to nic skomplikowanego. A jak wykorzystać go w praktyce?… Podobnie jak prezentowany wcześniej skrypt do uploadu na serwer FTP, można go wywołać komendą w rodzaju:
powershell -Command . 'C:\Sciezka\Do\Skryptu\MailFile.ps1' '%1'
którą podpinamy do menu kontekstowego plików lub podmenu Wyślij do.
W ten prosty sposób możemy oszczędzić sobie uruchamiania całego klienta poczty, względnie przeglądarki z webmailem. Naturalnie sporo rzeczy – jak chociażby temat wysyłanej wiadomości czy jej treść – możemy w zaprezentowanym kawałku kodu zmienić lub uzupełnić.