/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This file is part of guh. *
* *
* Guh is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, version 2 of the License. *
* *
* Guh is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with guh. If not, see . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*!
\page mailnotification.html
\title Mail Notification
\ingroup plugins
\ingroup services
The mail notification plugin allows you to send a mail notification from a mail
account by performing an \l{Action}.
ATTENTION: The password currently will be saved as plain text in the guh configuration file.
\section1 Google Mail Notification
\section2 Examples
\section3 Adding a Google Mail Notification service
In order to add a Google Mail Notification service you need to configure
the "Google Mail login" (user), the password for your Gmail account and the address
of the recipient.
\code
{
"id":1,
"method":"Devices.AddConfiguredDevice",
"params":{
"deviceClassId": "{38ed6ffc-f43b-48f8-aea2-8d63cdcad87e}",
"deviceParams":{
"user":"my.address@gmail.com",
"password":"my_secret_password"
"recipient":"recipient@example.com"}
}
}
}
\endcode
Before the device will be added, the plugin trys to login. If the username or the password
are wrong, an error message will be send.
\code
{
"id": 1,
"params": {
"deviceId": "{0b99ea27-896a-4a23-a044-3f1441f6a9a7}",
"errorMessage": "",
"success": true
},
"status": "success"
}
\endcode
\section3 Sending a mail notification
In order to send a mail notification from a configured Gmail service use following message
format.
\code
{
"id":1,
"method":"Actions.ExecuteAction",
"params":{
"actionTypeId": "{fa54f834-34d0-4aaf-b0ab-a165191d39d3}",
"deviceId":"{0b99ea27-896a-4a23-a044-3f1441f6a9a7}",
"params":{
"subject":"GUH notification",
"body":"Hello world!"
}
}
}
\endcode
response...
\code
{
"id": 1,
"params": {
"errorMessage": "",
"success": true
},
"status": "success"
}
\endcode
\section2 Plugin propertys:
\section3 Plugin parameters
Each configured plugin has following paramters:
\table
\header
\li Name
\li Description
\li Data Type
\row
\li user
\li This parameter holds the username (mail address) for the login
\li string
\row
\li password
\li This parameter holds the password for the login
\li string
\row
\li recipient
\li This parameter holds the mail address of the recipient of the notification
\li string
\endtable
\section3 Plugin actions:
Following list contains all plugin \l{Action}s:
\table
\header
\li Name
\li Description
\li UUID
\row
\li sendMail
\li This action sends a mail to the recipient address of the configured device
with a given subject and text body.
\li fa54f834-34d0-4aaf-b0ab-a165191d39d3
\endtable
\section1 Custom Mail Notification
\section2 Examples
\section3 Adding a Custom Mail Notification service
In order to add a Custom Mail Notification service you need to configure
the smtp host address, the login (user), the password, the address
of the recipient, the connection port and the authentification method (PLAIN or LOGIN).
The plugin currently supports only SSL encryption.
\code
{
"id":1,
"method":"Devices.AddConfiguredDevice",
"params":{
"deviceClassId": "{38ed6ffc-f43b-48f8-aea2-8d63cdcad87e}",
"deviceParams":{
"user":"my.address@gmail.com",
"password":"my_secret_password"
"recipient":"recipient@example.com"}
"host":"smtp.mydomain.com"}
"port":"465"}
"auth":"PLAIN"}
}
}
}
\endcode
Before the device will be added, the plugin trys to login. If the username or the password
are wrong, an error message will be send.
\code
{
"id": 1,
"params": {
"deviceId": "{0b99ea27-896a-4a23-a044-3f1441f6a9a7}",
"errorMessage": "",
"success": true
},
"status": "success"
}
\endcode
\section2 Plugin propertys:
\section3 Plugin parameters
Each configured plugin has following paramters:
\table
\header
\li Name
\li Description
\li Data Type
\row
\li user
\li This parameter holds the username (mail address) for the login
\li string
\row
\li password
\li This parameter holds the password for the login
\li string
\row
\li recipient
\li This parameter holds the mail address of the recipient of the notification
\li string
\row
\li host
\li This parameter holds the smtp host address from the mail server.
\li string
\row
\li port
\li This parameter holds the smtp port from the mail server.
\li int
\row
\li auth
\li This parameter holds the authentification method from the mail server.
Possible values are: PLAIN, LOGIN
\li string
\endtable
\section3 Plugin actions:
Following list contains all plugin \l{Action}s:
\table
\header
\li Name
\li Description
\li UUID
\row
\li sendMail
\li This action sends a mail to the recipient address of the configured device
with a given subject and text body.
\li fa54f834-34d0-4aaf-b0ab-a165191d39d3
\endtable
*/
#include "devicepluginmailnotification.h"
#include "plugin/device.h"
#include "devicemanager.h"
#include
#include
#include
#include
extern VendorId guhVendorId;
DeviceClassId googleMailDeviceClassId = DeviceClassId("3869884a-1592-4b8f-84a7-994be18ff555");
DeviceClassId customMailDeviceClassId = DeviceClassId("f4844c97-7ca6-4349-904e-ff9749a9fe74");
ActionTypeId sendMailActionTypeId = ActionTypeId("054613b0-3666-4dad-9252-e0ebca187edc");
DevicePluginMailNotification::DevicePluginMailNotification()
{
m_smtpClient = new SmtpClient();
}
DevicePluginMailNotification::~DevicePluginMailNotification()
{
m_smtpClient->deleteLater();
}
QList DevicePluginMailNotification::supportedVendors() const
{
QList ret;
Vendor mail(guhVendorId, "guh");
ret.append(mail);
return ret;
}
QList DevicePluginMailNotification::supportedDevices() const
{
QList ret;
// General Action
QList mailActions;
QList actionParamsMail;
ParamType actionParamSubject("subject", QVariant::String);
actionParamsMail.append(actionParamSubject);
ParamType actionParamBody("body", QVariant::String);
actionParamsMail.append(actionParamBody);
ActionType sendMailAction(sendMailActionTypeId);
sendMailAction.setName("send mail");
sendMailAction.setParameters(actionParamsMail);
mailActions.append(sendMailAction);
// Google Mail
// ---------------------------------------------------------------
DeviceClass deviceClassGoogleMail(pluginId(), guhVendorId, googleMailDeviceClassId);
deviceClassGoogleMail.setName("Google Mail Notification");
deviceClassGoogleMail.setCreateMethod(DeviceClass::CreateMethodUser);
// Params
QList googleMailParams;
ParamType userGoogleParam("user", QVariant::String);
googleMailParams.append(userGoogleParam);
ParamType passwordGoogleParam("password", QVariant::String);
googleMailParams.append(passwordGoogleParam);
ParamType recipientGoogleParam("recipient", QVariant::String);
googleMailParams.append(recipientGoogleParam);
deviceClassGoogleMail.setActions(mailActions);
deviceClassGoogleMail.setParamTypes(googleMailParams);
// Custom Mail
// ---------------------------------------------------------------
DeviceClass deviceClassCustomMail(pluginId(), guhVendorId, customMailDeviceClassId);
deviceClassCustomMail.setName("Custom Mail Notification");
deviceClassCustomMail.setCreateMethod(DeviceClass::CreateMethodUser);
// Params
QList customMailParams;
ParamType userCustomParam("user", QVariant::String);
customMailParams.append(userCustomParam);
ParamType passwordCustomParam("password", QVariant::String);
customMailParams.append(passwordCustomParam);
ParamType recipientCustomParam("recipient", QVariant::String);
customMailParams.append(recipientCustomParam);
ParamType hostCustomParam("host", QVariant::String);
customMailParams.append(hostCustomParam);
ParamType portCustomParam("port", QVariant::Int);
customMailParams.append(portCustomParam);
ParamType authCustomParam("auth", QVariant::String);
customMailParams.append(authCustomParam);
deviceClassCustomMail.setActions(mailActions);
deviceClassCustomMail.setParamTypes(customMailParams);
ret.append(deviceClassGoogleMail);
ret.append(deviceClassCustomMail);
return ret;
}
QPair DevicePluginMailNotification::setupDevice(Device *device)
{
// Google mail
// if(device->deviceClassId() == googleMailDeviceClassId){
// m_smtpClient->setConnectionType(SmtpClient::SslConnection);
// m_smtpClient->setAuthMethod(SmtpClient::AuthLogin);
// m_smtpClient->setPort(465);
// m_smtpClient->setHost("smtp.gmail.com");
// m_smtpClient->login(device->paramValue("user").toString(), device->paramValue("password").toString());
// }
return reportDeviceSetup();
}
DeviceManager::HardwareResources DevicePluginMailNotification::requiredHardware() const
{
return DeviceManager::HardwareResourceNone;
}
QPair DevicePluginMailNotification::executeAction(Device *device, const Action &action)
{
qDebug() << "execute action " << sendMailActionTypeId.toString();
if(action.actionTypeId() == sendMailActionTypeId){
// Google mail
if(device->deviceClassId() == googleMailDeviceClassId){
m_smtpClient->setConnectionType(SmtpClient::SslConnection);
m_smtpClient->setAuthMethod(SmtpClient::AuthLogin);
m_smtpClient->setPort(465);
m_smtpClient->setHost("smtp.gmail.com");
m_smtpClient->setUser(device->paramValue("user").toString());
m_smtpClient->setPassword(device->paramValue("password").toString());
m_smtpClient->setRecipiant(device->paramValue("recipiant").toString());
}
if(device->deviceClassId() == customMailDeviceClassId){
m_smtpClient->setConnectionType(SmtpClient::SslConnection);
if(device->paramValue("auth").toString() == "PLAIN"){
m_smtpClient->setAuthMethod(SmtpClient::AuthPlain);
}else if(device->paramValue("auth").toString() == "LOGIN"){
m_smtpClient->setAuthMethod(SmtpClient::AuthLogin);
}
m_smtpClient->setPort(device->paramValue("port").toInt());
m_smtpClient->setHost(device->paramValue("host").toString());
m_smtpClient->setUser(device->paramValue("user").toString());
m_smtpClient->setPassword(device->paramValue("password").toString());
}
m_smtpClient->sendMail(device->paramValue("user").toString(), device->paramValue("recipient").toString(), action.param("subject").value().toString(), action.param("body").value().toString());
}
return report();
}
QString DevicePluginMailNotification::pluginName() const
{
return "Mail notification";
}
PluginId DevicePluginMailNotification::pluginId() const
{
return PluginId("72aef158-07a3-4714-93b5-fec2f9d912d1");
}