1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2009, 2013-2016 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 // SettingSMTP.cpp : implementation file
23 #include "TortoiseProc.h"
24 #include "SettingSMTP.h"
27 #include "WindowsCredentialsStore.h"
29 // CSettingSMTP dialog
31 IMPLEMENT_DYNAMIC(CSettingSMTP
, ISettingsPropPage
)
33 CSettingSMTP::CSettingSMTP()
34 : ISettingsPropPage(CSettingSMTP::IDD
)
35 , m_regDeliveryType(L
"Software\\TortoiseGit\\TortoiseProc\\SendMail\\DeliveryType", SEND_MAIL_SMTP_DIRECT
)
36 , m_regServer(L
"Software\\TortoiseGit\\TortoiseProc\\SendMail\\Address", L
"")
37 , m_regPort(L
"Software\\TortoiseGit\\TortoiseProc\\SendMail\\Port", 25)
38 , m_regEncryption(L
"Software\\TortoiseGit\\TortoiseProc\\SendMail\\Encryption", 0)
39 , m_regAuthenticate(L
"Software\\TortoiseGit\\TortoiseProc\\SendMail\\AuthenticationRequired", FALSE
)
41 m_dwDeliveryType
= m_regDeliveryType
;
42 m_Server
= m_regServer
;
44 m_dwSMTPEnrcyption
= m_regEncryption
;
45 m_bAuth
= m_regAuthenticate
;
47 CWindowsCredentialsStore::GetCredential(L
"TortoiseGit:SMTP-Credentials", m_User
, m_Password
);
50 CSettingSMTP::~CSettingSMTP()
54 void CSettingSMTP::DoDataExchange(CDataExchange
* pDX
)
56 CPropertyPage::DoDataExchange(pDX
);
57 DDX_Control(pDX
, IDC_SMTPDELIVERYCOMBO
, m_SMTPDeliveryTypeCombo
);
58 DDX_Control(pDX
, IDC_SMTPENCRYPTIONCOMBO
, m_SMTPEncryptionCombo
);
59 DDX_Check(pDX
, IDC_SMTP_AUTH
, m_bAuth
);
60 DDX_Text(pDX
, IDC_SMTP_SERVER
, m_Server
);
61 DDX_Text(pDX
, IDC_SMTP_PORT
, m_Port
);
62 DDX_Text(pDX
, IDC_SMTP_USER
, m_User
);
63 DDX_Text(pDX
, IDC_SMTP_PASSWORD
, m_Password
);
66 BEGIN_MESSAGE_MAP(CSettingSMTP
, CPropertyPage
)
67 ON_CBN_SELCHANGE(IDC_SMTPDELIVERYCOMBO
, OnModifiedDeliveryCombo
)
68 ON_CBN_SELCHANGE(IDC_SMTPENCRYPTIONCOMBO
, OnModifiedEncryptionCombo
)
69 ON_BN_CLICKED(IDC_SMTP_AUTH
, OnBnClickedSmtpAuth
)
70 ON_CBN_SELCHANGE(IDC_SMTPENCRYPTIONCOMBO
, OnModified
)
71 ON_EN_CHANGE(IDC_SMTP_SERVER
, OnModified
)
72 ON_EN_CHANGE(IDC_SMTP_PORT
, OnModified
)
73 ON_EN_CHANGE(IDC_SEND_ADDRESS
, OnModified
)
74 ON_EN_CHANGE(IDC_SMTP_USER
, OnModified
)
75 ON_EN_CHANGE(IDC_SMTP_PASSWORD
, OnModified
)
78 BOOL
CSettingSMTP::OnInitDialog()
80 ISettingsPropPage::OnInitDialog();
82 AdjustControlSize(IDC_SMTP_AUTH
);
84 int idx
= m_SMTPDeliveryTypeCombo
.AddString(CString(MAKEINTRESOURCE(IDS_SMTP_DIRECTLY
)));
85 m_SMTPDeliveryTypeCombo
.SetItemData(idx
, SEND_MAIL_SMTP_DIRECT
);
87 CMailMsg::DetectMailClient(mailCient
);
88 if (!mailCient
.IsEmpty())
90 idx
= m_SMTPDeliveryTypeCombo
.AddString(CString(MAKEINTRESOURCE(IDS_SMTP_MAPI
)));
91 m_SMTPDeliveryTypeCombo
.SetItemData(idx
, SEND_MAIL_MAPI
);
93 idx
= m_SMTPDeliveryTypeCombo
.AddString(CString(MAKEINTRESOURCE(IDS_SMTP_CONFIGURED
)));
94 m_SMTPDeliveryTypeCombo
.SetItemData(idx
, SEND_MAIL_SMTP_CONFIGURED
);
96 if ((int)m_dwDeliveryType
>= m_SMTPDeliveryTypeCombo
.GetCount())
99 m_SMTPDeliveryTypeCombo
.SetCurSel(m_dwDeliveryType
);
101 m_SMTPEncryptionCombo
.AddString(CString(MAKEINTRESOURCE(IDS_ENCRYPT_NONE
)));
102 m_SMTPEncryptionCombo
.AddString(CString(MAKEINTRESOURCE(IDS_ENCRYPT_STARTTLS
)));
103 m_SMTPEncryptionCombo
.AddString(CString(MAKEINTRESOURCE(IDS_ENCRYPT_SSL
)));
105 if ((int)m_dwSMTPEnrcyption
>= m_SMTPEncryptionCombo
.GetCount())
106 m_dwSMTPEnrcyption
= 0;
108 m_SMTPEncryptionCombo
.SetCurSel(m_dwSMTPEnrcyption
);
110 this->UpdateData(FALSE
);
112 OnModifiedDeliveryCombo();
113 OnBnClickedSmtpAuth();
118 void CSettingSMTP::OnModified()
123 void CSettingSMTP::OnModifiedEncryptionCombo()
125 m_dwSMTPEnrcyption
= m_SMTPEncryptionCombo
.GetCurSel();
129 void CSettingSMTP::OnModifiedDeliveryCombo()
131 m_dwDeliveryType
= (DWORD
)m_SMTPDeliveryTypeCombo
.GetItemData(m_SMTPDeliveryTypeCombo
.GetCurSel());
133 GetDlgItem(IDC_SMTP_PASSWORD
)->EnableWindow(m_dwDeliveryType
>= 2 && m_bAuth
);
134 GetDlgItem(IDC_SMTP_USER
)->EnableWindow(m_dwDeliveryType
>= 2 && m_bAuth
);
135 GetDlgItem(IDC_SMTP_AUTH
)->EnableWindow(m_dwDeliveryType
>= 2);
136 GetDlgItem(IDC_SMTPENCRYPTIONCOMBO
)->EnableWindow(m_dwDeliveryType
>= 2);
137 GetDlgItem(IDC_SMTP_PORT
)->EnableWindow(m_dwDeliveryType
>= 2);
138 GetDlgItem(IDC_SMTP_SERVER
)->EnableWindow(m_dwDeliveryType
>= 2);
139 GetDlgItem(IDC_STATIC_SMTPENCRYPTION
)->EnableWindow(m_dwDeliveryType
>= 2);
140 GetDlgItem(IDC_STATIC_SMTPLOGIN
)->EnableWindow(m_dwDeliveryType
>= 2 && m_bAuth
);
141 GetDlgItem(IDC_STATIC_SMTPPASSWORD
)->EnableWindow(m_dwDeliveryType
>= 2 && m_bAuth
);
142 GetDlgItem(IDC_STATIC_SMTPPORT
)->EnableWindow(m_dwDeliveryType
>= 2);
143 GetDlgItem(IDC_STATIC_SMTPSERVER
)->EnableWindow(m_dwDeliveryType
>= 2);
148 BOOL
CSettingSMTP::OnApply()
153 m_regDeliveryType
= m_dwDeliveryType
;
154 m_regServer
= m_Server
;
156 m_regAuthenticate
= m_bAuth
;
157 m_regEncryption
= m_dwSMTPEnrcyption
;
158 if (m_User
.IsEmpty() && m_Password
.IsEmpty())
159 CWindowsCredentialsStore::DeleteCredential(L
"TortoiseGit:SMTP-Credentials");
161 CWindowsCredentialsStore::SaveCredential(L
"TortoiseGit:SMTP-Credentials", m_User
, m_Password
);
165 return ISettingsPropPage::OnApply();
168 // CSettingSMTP message handlers
169 void CSettingSMTP::OnBnClickedSmtpAuth()
172 GetDlgItem(IDC_SMTP_USER
)->EnableWindow(m_bAuth
);
173 GetDlgItem(IDC_SMTP_PASSWORD
)->EnableWindow(m_bAuth
);
174 GetDlgItem(IDC_STATIC_SMTPLOGIN
)->EnableWindow(m_bAuth
);
175 GetDlgItem(IDC_STATIC_SMTPPASSWORD
)->EnableWindow(m_bAuth
);