aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/settings/SettingsSendMail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/settings/SettingsSendMail.cpp')
-rw-r--r--src/ui/settings/SettingsSendMail.cpp399
1 files changed, 267 insertions, 132 deletions
diff --git a/src/ui/settings/SettingsSendMail.cpp b/src/ui/settings/SettingsSendMail.cpp
index 2518991d..733ed82f 100644
--- a/src/ui/settings/SettingsSendMail.cpp
+++ b/src/ui/settings/SettingsSendMail.cpp
@@ -28,126 +28,211 @@
#include "smtp/SmtpMime"
#endif
+#include "ui/settings/GlobalSettingStation.h"
+#include "ui_SendMailSettings.h"
+
namespace GpgFrontend::UI {
SendMailTab::SendMailTab(QWidget* parent)
- : QWidget(parent),
- appPath(qApp->applicationDirPath()),
- settings(RESOURCE_DIR(appPath) + "/conf/gpgfrontend.ini",
- QSettings::IniFormat) {
- enableCheckBox = new QCheckBox(_("Enable"));
- enableCheckBox->setTristate(false);
-
- smtpAddress = new QLineEdit();
- username = new QLineEdit();
- password = new QLineEdit();
- password->setEchoMode(QLineEdit::Password);
-
- portSpin = new QSpinBox();
- portSpin->setMinimum(1);
- portSpin->setMaximum(65535);
- connectionTypeComboBox = new QComboBox();
- connectionTypeComboBox->addItem("None");
- connectionTypeComboBox->addItem("SSL");
- connectionTypeComboBox->addItem("TLS");
- connectionTypeComboBox->addItem("STARTTLS");
-
- defaultSender = new QLineEdit();
- ;
- checkConnectionButton = new QPushButton(_("Check Connection"));
-
- auto generalGroupBox = new QGroupBox(_("General"));
- auto connectGroupBox = new QGroupBox(_("Connection"));
- auto preferenceGroupBox = new QGroupBox(_("Preference"));
-
- auto generalLayout = new QGridLayout();
- generalLayout->addWidget(enableCheckBox);
-
- auto connectLayout = new QGridLayout();
- connectLayout->addWidget(new QLabel(_("SMTP Address")), 1, 0);
- connectLayout->addWidget(smtpAddress, 1, 1, 1, 4);
- connectLayout->addWidget(new QLabel(_("Username")), 2, 0);
- connectLayout->addWidget(username, 2, 1, 1, 4);
- connectLayout->addWidget(new QLabel(_("Password")), 3, 0);
- connectLayout->addWidget(password, 3, 1, 1, 4);
- connectLayout->addWidget(new QLabel(_("Port")), 4, 0);
- connectLayout->addWidget(portSpin, 4, 1, 1, 1);
- connectLayout->addWidget(new QLabel(_("Connection Security")), 5, 0);
- connectLayout->addWidget(connectionTypeComboBox, 5, 1, 1, 1);
- connectLayout->addWidget(checkConnectionButton, 6, 0);
-
- auto preferenceLayout = new QGridLayout();
-
- preferenceLayout->addWidget(new QLabel(_("Default Sender")), 0, 0);
- preferenceLayout->addWidget(defaultSender, 0, 1, 1, 4);
-
- generalGroupBox->setLayout(generalLayout);
- connectGroupBox->setLayout(connectLayout);
- preferenceGroupBox->setLayout(preferenceLayout);
-
- auto vBox = new QVBoxLayout();
- vBox->addWidget(generalGroupBox);
- vBox->addWidget(connectGroupBox);
- vBox->addWidget(preferenceGroupBox);
- vBox->addStretch(0);
-
- connect(enableCheckBox, SIGNAL(stateChanged(int)), this,
- SLOT(slotCheckBoxSetEnableDisable(int)));
-
- this->setLayout(vBox);
+ : QWidget(parent), ui(std::make_shared<Ui_SendMailSettings>()) {
+ ui->setupUi(this);
+
+ connect(ui->enableCheckBox, &QCheckBox::stateChanged, this, [=](int state) {
+ ui->smtpServerAddressEdit->setDisabled(state != Qt::Checked);
+ ui->portSpin->setDisabled(state != Qt::Checked);
+ ui->connextionSecurityComboBox->setDisabled(state != Qt::Checked);
+
+ ui->identityCheckBox->setDisabled(state != Qt::Checked);
+ ui->usernameEdit->setDisabled(state != Qt::Checked);
+ ui->passwordEdit->setDisabled(state != Qt::Checked);
+
+ ui->defaultSenderEmailEdit->setDisabled(state != Qt::Checked);
+ ui->checkConnectionButton->setDisabled(state != Qt::Checked);
+ });
+
+#ifdef SMTP_SUPPORT
+ connect(ui->checkConnectionButton, &QPushButton::clicked, this,
+ &SendMailTab::slotCheckConnection);
+ connect(ui->senTestMailButton, &QPushButton::clicked, this,
+ &SendMailTab::slotSendTestMail);
+#endif
+
+ connect(ui->identityCheckBox, &QCheckBox::stateChanged, this, [=](int state) {
+ ui->usernameEdit->setDisabled(state != Qt::Checked);
+ ui->passwordEdit->setDisabled(state != Qt::Checked);
+ });
+
+ ui->generalGroupBox->setTitle(_("General"));
+ ui->identityGroupBox->setTitle(_("Identity Information"));
+ ui->preferenceGroupBox->setTitle(_("Preference"));
+ ui->operationsGroupBox->setTitle(_("Operations"));
+
+ ui->enableCheckBox->setText(_("Enable Send Mail Ability"));
+ ui->identityCheckBox->setText(_("Need Auth"));
+
+ ui->smtpServerAddressLabel->setText(_("SMTP Server Address"));
+ ui->smtpServerPortLabel->setText(_("SMTP Server Port"));
+ ui->connectionSecurityLabel->setText(_("SMTP Connection Security"));
+ ui->usernameLabel->setText(_("Username"));
+ ui->passwordLabel->setText(_("Password"));
+
+ ui->senderLabel->setText(_("Default Sender Email"));
+ ui->checkConnectionButton->setText(_("Check Connection"));
+ ui->senTestMailButton->setText(_("Send Test Email"));
+ ui->tipsLabel->setText(
+ _("Tips: It is recommended that you build your own mail server or use "
+ "a trusted mail server. If you don't know the detailed configuration "
+ "information, you can get it from the mail service provider."));
+
+ ui->senTestMailButton->setDisabled(true);
+
+ auto* email_validator =
+ new QRegularExpressionValidator(re_email, ui->defaultSenderEmailEdit);
+ ui->defaultSenderEmailEdit->setValidator(email_validator);
+
setSettings();
}
-/**********************************
- * Read the settings from config
- * and set the buttons and checkboxes
- * appropriately
- **********************************/
void SendMailTab::setSettings() {
- if (settings.value("sendMail/enable", false).toBool())
- enableCheckBox->setCheckState(Qt::Checked);
- else {
- enableCheckBox->setCheckState(Qt::Unchecked);
- smtpAddress->setDisabled(true);
- username->setDisabled(true);
- password->setDisabled(true);
- portSpin->setDisabled(true);
- connectionTypeComboBox->setDisabled(true);
- defaultSender->setDisabled(true);
- checkConnectionButton->setDisabled(true);
- }
-
- smtpAddress->setText(
- settings.value("sendMail/smtpAddress", QString()).toString());
- username->setText(settings.value("sendMail/username", QString()).toString());
- password->setText(settings.value("sendMail/password", QString()).toString());
- portSpin->setValue(settings.value("sendMail/port", 25).toInt());
- connectionTypeComboBox->setCurrentText(
- settings.value("sendMail/connectionType", "None").toString());
- defaultSender->setText(
- settings.value("sendMail/defaultSender", QString()).toString());
+ auto& settings = GlobalSettingStation::GetInstance().GetUISettings();
+
+ try {
+ std::string mail_address = settings.lookup("smtp.mail_address");
+ ui->smtpServerAddressEdit->setText(mail_address.c_str());
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("mail_address");
+ }
+
+ try {
+ std::string std_username = settings.lookup("smtp.username");
+ ui->usernameEdit->setText(std_username.c_str());
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("username");
+ }
+
+ try {
+ std::string std_password = settings.lookup("smtp.password");
+ ui->passwordEdit->setText(std_password.c_str());
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("password");
+ }
+
+ try {
+ int port = settings.lookup("smtp.port");
+ ui->portSpin->setValue(port);
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("port");
+ }
+
+ ui->connextionSecurityComboBox->setCurrentText("None");
+ try {
+ std::string connection_type = settings.lookup("smtp.connection_type");
+ ui->connextionSecurityComboBox->setCurrentText(connection_type.c_str());
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("connection_type");
+ }
+
+ try {
+ std::string default_sender = settings.lookup("smtp.default_sender");
+ ui->defaultSenderEmailEdit->setText(default_sender.c_str());
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("default_sender");
+ }
+
+ ui->identityCheckBox->setCheckState(Qt::Unchecked);
+ try {
+ bool identity_enable = settings.lookup("smtp.identity_enable");
+ if (identity_enable)
+ ui->identityCheckBox->setCheckState(Qt::Checked);
+ else
+ ui->identityCheckBox->setCheckState(Qt::Unchecked);
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("identity_enable");
+ }
+
+ ui->enableCheckBox->setCheckState(Qt::Unchecked);
+ try {
+ bool smtp_enable = settings.lookup("smtp.enable");
+ if (smtp_enable)
+ ui->enableCheckBox->setCheckState(Qt::Checked);
+ else
+ ui->enableCheckBox->setCheckState(Qt::Unchecked);
+ } catch (...) {
+ LOG(ERROR) << _("Setting Operation Error") << _("save_key_checked");
+ }
}
-/***********************************
- * get the values of the buttons and
- * write them to settings-file
- *************************************/
void SendMailTab::applySettings() {
- settings.setValue("sendMail/smtpAddress", smtpAddress->text());
- settings.setValue("sendMail/username", username->text());
- settings.setValue("sendMail/password", password->text());
- settings.setValue("sendMail/port", portSpin->value());
- settings.setValue("sendMail/connectionType",
- connectionTypeComboBox->currentText());
- settings.setValue("sendMail/defaultSender", defaultSender->text());
-
- settings.setValue("sendMail/enable", enableCheckBox->isChecked());
+ auto& settings =
+ GpgFrontend::UI::GlobalSettingStation::GetInstance().GetUISettings();
+
+ if (!settings.exists("smtp") ||
+ settings.lookup("smtp").getType() != libconfig::Setting::TypeGroup)
+ settings.add("smtp", libconfig::Setting::TypeGroup);
+
+ auto& smtp = settings["smtp"];
+
+ if (!smtp.exists("mail_address"))
+ smtp.add("mail_address", libconfig::Setting::TypeString) =
+ ui->smtpServerAddressEdit->text().toStdString();
+ else {
+ smtp["mail_address"] = ui->smtpServerAddressEdit->text().toStdString();
+ }
+
+ if (!smtp.exists("username"))
+ smtp.add("username", libconfig::Setting::TypeString) =
+ ui->usernameEdit->text().toStdString();
+ else {
+ smtp["username"] = ui->usernameEdit->text().toStdString();
+ }
+
+ if (!smtp.exists("password"))
+ smtp.add("password", libconfig::Setting::TypeString) =
+ ui->passwordEdit->text().toStdString();
+ else {
+ smtp["password"] = ui->passwordEdit->text().toStdString();
+ }
+
+ if (!smtp.exists("port"))
+ smtp.add("port", libconfig::Setting::TypeInt) = ui->portSpin->value();
+ else {
+ smtp["port"] = ui->portSpin->value();
+ }
+
+ if (!smtp.exists("connection_type"))
+ smtp.add("connection_type", libconfig::Setting::TypeString) =
+ ui->connextionSecurityComboBox->currentText().toStdString();
+ else {
+ smtp["connection_type"] =
+ ui->connextionSecurityComboBox->currentText().toStdString();
+ }
+
+ if (!smtp.exists("default_sender"))
+ smtp.add("default_sender", libconfig::Setting::TypeString) =
+ ui->defaultSenderEmailEdit->text().toStdString();
+ else {
+ smtp["default_sender"] = ui->defaultSenderEmailEdit->text().toStdString();
+ }
+
+ if (!smtp.exists("identity_enable"))
+ smtp.add("identity_enable", libconfig::Setting::TypeBoolean) =
+ ui->identityCheckBox->isChecked();
+ else {
+ smtp["identity_enable"] = ui->identityCheckBox->isChecked();
+ }
+
+ if (!smtp.exists("enable"))
+ smtp.add("enable", libconfig::Setting::TypeBoolean) =
+ ui->enableCheckBox->isChecked();
+ else {
+ smtp["enable"] = ui->enableCheckBox->isChecked();
+ }
}
#ifdef SMTP_SUPPORT
void SendMailTab::slotCheckConnection() {
SmtpClient::ConnectionType connectionType;
- const auto selectedConnType = connectionTypeComboBox->currentText();
+ const auto selectedConnType = ui->connextionSecurityComboBox->currentText();
if (selectedConnType == "SSL") {
connectionType = SmtpClient::ConnectionType::SslConnection;
} else if (selectedConnType == "TLS" || selectedConnType == "STARTTLS") {
@@ -156,46 +241,96 @@ void SendMailTab::slotCheckConnection() {
connectionType = SmtpClient::ConnectionType::TcpConnection;
}
- SmtpClient smtp(smtpAddress->text(), portSpin->value(), connectionType);
-
- smtp.setUser(username->text());
- smtp.setPassword(password->text());
+ SmtpClient smtp(ui->smtpServerAddressEdit->text(), ui->portSpin->value(),
+ connectionType);
- bool if_success = true;
+ if (ui->identityCheckBox->isChecked()) {
+ smtp.setUser(ui->usernameEdit->text());
+ smtp.setPassword(ui->passwordEdit->text());
+ }
if (!smtp.connectToHost()) {
QMessageBox::critical(this, _("Fail"), _("Fail to Connect SMTP Server"));
- if_success = false;
+ ui->senTestMailButton->setDisabled(true);
+ return;
}
- if (if_success && !smtp.login()) {
+ if (!smtp.login()) {
QMessageBox::critical(this, _("Fail"), _("Fail to Login"));
- if_success = false;
+ ui->senTestMailButton->setDisabled(true);
+ return;
}
- if (if_success)
- QMessageBox::information(this, _("Success"),
- _("Succeed in connecting and login"));
+ QMessageBox::information(this, _("Success"),
+ _("Succeed in connecting and login"));
+ ui->senTestMailButton->setDisabled(false);
}
#endif
-void SendMailTab::slotCheckBoxSetEnableDisable(int state) {
- if (state == Qt::Checked) {
- smtpAddress->setEnabled(true);
- username->setEnabled(true);
- password->setEnabled(true);
- portSpin->setEnabled(true);
- connectionTypeComboBox->setEnabled(true);
- defaultSender->setEnabled(true);
- checkConnectionButton->setEnabled(true);
+#ifdef SMTP_SUPPORT
+void SendMailTab::slotSendTestMail() {
+ if (ui->defaultSenderEmailEdit->text().isEmpty()) {
+ QMessageBox::critical(this, _("Fail"), _("Given a default sender first"));
+ return;
+ }
+
+ SmtpClient::ConnectionType connectionType;
+ const auto selectedConnType = ui->connextionSecurityComboBox->currentText();
+ if (selectedConnType == "SSL") {
+ connectionType = SmtpClient::ConnectionType::SslConnection;
+ } else if (selectedConnType == "TLS" || selectedConnType == "STARTTLS") {
+ connectionType = SmtpClient::ConnectionType::TlsConnection;
} else {
- smtpAddress->setDisabled(true);
- username->setDisabled(true);
- password->setDisabled(true);
- portSpin->setDisabled(true);
- connectionTypeComboBox->setDisabled(true);
- defaultSender->setDisabled(true);
- checkConnectionButton->setDisabled(true);
+ connectionType = SmtpClient::ConnectionType::TcpConnection;
+ }
+
+ SmtpClient smtp(ui->smtpServerAddressEdit->text(), ui->portSpin->value(),
+ connectionType);
+
+ if (ui->identityCheckBox->isChecked()) {
+ smtp.setUser(ui->usernameEdit->text());
+ smtp.setPassword(ui->passwordEdit->text());
}
+
+ MimeMessage message;
+
+ auto sender_address = ui->defaultSenderEmailEdit->text();
+ message.setSender(new EmailAddress(sender_address));
+ message.addRecipient(new EmailAddress(sender_address));
+ message.setSubject(_("Test Email from GpgFrontend"));
+
+ MimeText text;
+ text.setText(_("Hello, this is a test email from GpgFrontend."));
+ // Now add it to the mail
+ message.addPart(&text);
+ // Now we can send the mail
+ if (!smtp.connectToHost()) {
+ LOG(INFO) << "Connect to SMTP Server Failed";
+ QMessageBox::critical(this, _("Fail"), _("Fail to Connect SMTP Server"));
+ ui->senTestMailButton->setDisabled(true);
+ return;
+ }
+ if (!smtp.login()) {
+ LOG(INFO) << "Login to SMTP Server Failed";
+ QMessageBox::critical(this, _("Fail"), _("Fail to Login into SMTP Server"));
+ ui->senTestMailButton->setDisabled(true);
+ return;
+ }
+ if (!smtp.sendMail(message)) {
+ LOG(INFO) << "Send Mail to SMTP Server Failed";
+ QMessageBox::critical(
+ this, _("Fail"),
+ _("Fail to send a test email to the SMTP Server, please "
+ "recheck your configuration."));
+ ui->senTestMailButton->setDisabled(true);
+ return;
+ }
+ smtp.quit();
+
+ // Close after sending email
+ QMessageBox::information(
+ this, _("Success"),
+ _("Succeed in sending a test email to the SMTP Server"));
}
+#endif
} // namespace GpgFrontend::UI