Тема: JScript: Отправка почты с помощью CDO.Message
Захотелось поиграться с отправкой почты скриптом, без внешних утилит. Приглашаю всех заинтересованных и любопытствующих к тестированию. Критика и пожелания к расширению приветствуются. Кое-что получилось - почта отправляется, принимается. Можно прикреплять файлы, указывать различные параметры и дополнительные заголовки сообщений (уведомление о доставке, прочтении, важность письма и прочие).
Интерфейс прост - все писалось с упором на простоту использования. Так как это всего лишь обертка вокруг компонента, то не все возможности компонента реализованы в интерфейсе. Кое-то можно реализовать и вручную. Если будет интерес и модуль востребован, работы можно будет продолжить, а функционал компонента добавить в методы класса. Опять же с целью упрощения взаимодействия.
Также добавлены еще три обертки - для наиболее популярных у нас в России почтовых служб Mail.Ru, Yandex, и GMail.
Во всех примерах используется для отправки GMail. Аналогично работают и другие. Необходимо указать правильные параметры: авторизация, использование SSL и прочие. Для своих тестов замените username, password на реальные значения ваших почтовых ящиков, а также исправьте smtpserver, smtpserverport в случае использования вами другой службы, отличной от GMail. Значение recipient может быть таким же как и username. В таком случае письмо просто придет к вам же.
Общий пример отправки почты. Используется GMail. Все параметры указаны явно.
// логин и пароль для авторизации на сервере gmail
// логин также используется в качестве поля From
var username = 'login@gmail.com';
var password = 'password';
// адрес получателя
var recepient = 'login@gmail.com';
var mailer = new Mail({
sendusing: 2,
smtpusessl: true,
smtpauthenticate: 1,
smtpserver: 'smtp.gmail.com',
smtpserverport: 465,
sendusername: username,
sendpassword: password
});
mailer.send({
from: username,
to: recepient,
subject: 'Тестовое письмо',
textbody: 'Это письмо отправлено скриптом через почтовую службу GMail'
});
.
То же самое. Используется обертка Mail.GMail
// логин и пароль для авторизации на сервере gmail
// логин также используется в качестве поля From
var username = 'login@gmail.com';
var password = 'password';
// адрес получателя
var recepient = 'login@gmail.com';
var mailer = new Mail.GMail({
sendusername: username,
sendpassword: password
});
mailer.send({
from: username,
to: recepient,
subject: 'Тестовое письмо',
textbody: 'Это письмо отправлено скриптом через почтовую службу GMail'
});
.
Отправка почты с прикрепленным файлом
// логин и пароль для авторизации на сервере gmail
// логин также используется в качестве поля From
var username = 'login@gmail.com';
var password = 'password';
// адрес получателя
var recepient = 'login@gmail.com';
var mailer = new Mail.GMail({
sendusername: username,
sendpassword: password
});
var filename = 'C:\\Windows\\System32\\drivers\etc\\lmhosts.sam';
mailer.addAttachment(filename);
mailer.send({
from: username,
to: recepient,
subject: 'Письмо с вложением',
textbody: 'К письму прикреплен один файл'
});
.
Исходный код без комментариев.
Полный текст расположен по адресу http://code.google.com/p/jsxt/source/br … 32/Mail.js
//
// Mail.js
// Extension to simplify sending of e-mails via CDO.Message
//
// Copyright (c) 2012 by Ildar Shaimordanov
//
function Mail(options)
{
this.driver = new ActiveXObject('CDO.Message');
this.configure(options);
};
(function()
{
var fieldsUpdate = function(fields, prefix, options)
{
for (var p in options) {
if ( ! p || ! options.hasOwnProperty(p) ) {
continue;
}
fields.Item(prefix + p) = options[p];
}
fields.Update();
};
Mail.prototype.configure = function(options)
{
fieldsUpdate(
this.driver.Configuration.Fields,
'http://schemas.microsoft.com/cdo/configuration/',
options);
};
Mail.prototype.setMailHeaders = function(options)
{
fieldsUpdate(
this.driver.Fields,
'urn:schemas:mailheader:',
options);
};
Mail.prototype.addAttachment = function(URL, mimetype, options)
{
options = options || {};
var attachment = this.driver.AddAttachment(URL, options.username, options.password);
if ( mimetype ) {
attachment.ContentMediaType = mimtype;
}
};
Mail.prototype.prepareMessage = function(options)
{
var driver = this.driver;
for (var p in options) {
if ( ! p || ! options.hasOwnProperty(p) ) {
continue;
}
driver[p] = options[p];
}
};
Mail.prototype.send = function(options)
{
this.prepareMessage(options);
this.driver.Send();
};
var prepareSmtpOptions = function(options, host, port)
{
options = options || {};
options.sendusing = 2;
options.smtpusessl = true;
options.smtpauthenticate = 1;
options.smtpserver = host;
options.smtpserverport = port;
return options;
};
Mail.MailRu = function(options)
{
return new Mail(prepareSmtpOptions(options, 'smtp.mail.ru', 25));
};
Mail.Yandex = function(options)
{
return new Mail(prepareSmtpOptions(options, 'smtp.yandex.ru', 465));
};
Mail.GMail = function(options)
{
return new Mail(prepareSmtpOptions(options, 'smtp.gmail.com', 465));
};
})();