После запуска программы и нажатия кнопки Послать письмо
будет открыто стандартное окно Контакты
, где можно выбрать адресата. После выбора получателя по его электронному адресу будет отправлено электронное письмо с заданным содержанием.
Если надо отправить электронное письмо адресату, который не внесен в адресную книгу, то пример надо переработать. Новый код приведен в листинге 10.8.
Листинг 10.8
private void butSendEmail2_Click(object sender, EventArgs e) {
Recipient recipient = new Recipient("alexander.klimoff@gmail.com");
EmailMessage msg = new EmailMessage();
// Кому письмо
msg.To.Add(recipient);
// Тема письма
msg.Subject = "О вашей книге";
// Текст письма
msg.BodyText = "Спасибо за книгу";
msg.Send("ActiveSync");
}
Отправка SMS-сообщения с помощью новых возможностей тоже очень и очень проста. Эти сообщения весьма популярны у владельцев мобильных телефонов. Раньше для отсылки и приема SMS
приходилось использовать неуправляемый код, очень сложный для восприятия неопытным программистом. Теперь создать код, отсылающий сообщение, не сложнее, чем написать само сообщение, что иллюстрирует листинг 10.9.
Листинг 10.9.
private void butSendSMS_Click(object sender, EventArgs e) {
ChooseContactDialog contactDialog = new ChooseContactDialog();
contactDialog.Title = "Выберите получателя";
if (contactDialog.ShowDialog() == DialogResult.OK) {
// Создаем SMS-сообщение
SmsMessage message = new SmsMessage(
contactDialog.SelectedContact.MobileTelephoneNumber,
"Купи хлеба. Жена");
message.RequestDeliveryReport = true;
// Посылаем сообщение
message.Send();
}
}
В этом примере SMS-сообщение отсылалось адресату, чья запись уже имелась в адресной книге. Если же требуется отправить сообщение, не используя окно Контакты
, то придется воспользоваться другим кодом.
Здесь я хочу сделать небольшое отступление и открыть вам большой секрет. Разработчик может посылать SMS-сообщения самому себе при помощи эмулятора! Если послать SMS-сообщение из эмулятора на телефонный номер 4250010001, то оно вернется на эмулятор (рис. 10.7).
Итак, необходимо отправить SMS-сообщение человеку, чья учетная запись не отражена в списке Контакты
. Для этого используется код, приведенный в листинге 10.10.
ПРИМЕЧАНИЕ
При отладке приложения в эмуляторе надо использовать целевое устройство типа «Phone Edition». Если проверять пример в обычном эмуляторе, то будет отображено сообщение об ошибке «Could not load sms.dll». Впрочем, это не удивительно. Если эмулятор не имеет телефонных функций, то как можно отправлять SMS-сообщение?
Листинг 10.10
private void butSendSMS2_Click(object sender, EventArgs e) {
SmsMessage message = new SmsMessage();
// Номер получателя
message.To.Add(new Recipient("4250010001"));
// Текст сообщения
message.Body = "Позвони домой";
// Посылаем сообщение
message.Send();
}
Результат выполнения этого кода приведен на рис. 10.7.
Рис. 10.7. Прием SMS-сообщения
Прием и обработка SMS-сообщений
Итак, мы научились отправлять SMS-сообщения из своей программы. Но было бы неплохо научить приложения принимать подобные сообщения. Для приема сообщений существует пространство имен MessageInterception
, которое находится в сборке Microsoft.WindowsMobilе.PocketOutlook
.
Следует заметить: можно организовать прием сообщений таким образом, что запущенное приложение будет перехватывать нужные сообщения, содержащие ключевые слова. Причем система даже не покажет окно, уведомляющее о прибытии перехваченного события.
С этой возможностью стоит познакомиться ближе. После создания нового проекта InterceptionSMS_CS
, нужно добавить на форму кнопку для отсылки SMS-сообщения, флажок chkAlert
для установки флага срочности и текстовое поле, в котором будет содержаться текст SMS-сообщения. Затем надо задать ссылки на уже применявшиеся ранее сборки Microsoft.WindowsMobile
и Microsoft.WindowsMobile.PocketOutlook
. Код, отвечающий за обработку принятых сообщений, приведен в листинге 10.11
Листинг 10.11
using Microsoft.WindowsMobile;
using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;
// Объявляем переменную
private MessageInterceptor smsInterceptor;
private void smsInterceptor_MessageReceived(object sender,
MessageInterceptorEventArgs e) {
Читать дальше