Accueil > > > [QT] ENVOI AUTO DE MAIL HEBDOMADAIRE
[QT] ENVOI AUTO DE MAIL HEBDOMADAIRE
Information sur la source
Description
Ce programme permet d'envoyer un mail de façon hebdomadaire. Il est basé sur le framework Qt (exécutable compilé sous Gnome, Qt 4.8). Il utilise le protocole ASMTP, aussi connu sous le nom de SMTP AUTH (Simple Mail Transfert Protocol with Authentification) pour envoyer le mail (facilement modifiable pour utiliser simplement le protocole SMTP sans authentification). Le protocole est implémenté à l'aide de QTcpSocket. Ce protocole permet l'ajout d'une pièce jointe. Les données (sujet, corps et pièce jointe du mail) sont encodés en base64. Le mail est donc envoyé en "multipart" (voir les MIME-Type pour plus d'infos). Le programme prend en charge du texte riche pour le corps du message. L'horloge est réalisée avec un QTimer, avec un timeout de 1 seconde. Un widget permet de connaitre l'état de l'envoi du mail,les erreurs, ou simplement le temps restant avant l'envoi du mail. Il est possible de tester les identifiants du compte mail, et d'envoyer un mail de test. L'adresse mail de départ nécessite un mot de passe. PS: Il s'agit de la première source que je publie, donc soyez critique si ça ne va pas ;) Sources: Qt Icones: http://www.softicons.com/
Source
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
-
- MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- srand(QDateTime::currentDateTime().toTime_t());
-
- set=new QSettings("options.ini", QSettings::IniFormat, this);
-
- tray=new QSystemTrayIcon(QIcon(":/Mail.png"), this);
- tray->show();
- connect(tray, SIGNAL(messageClicked()), this, SLOT(show()));
- connect(tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason)));
- tray->setContextMenu(new QMenu("Menu", this));
- connect(tray->contextMenu()->addAction("Afficher"), SIGNAL(triggered()), this, SLOT(show()));
- connect(tray->contextMenu()->addAction("Quitter"), SIGNAL(triggered()), qApp, SLOT(quit()));
-
- widStatus=new WidStatus();
-
-
- setupUI();
- show();
-
- QTimer* timer=new QTimer(this);
- timer->setInterval(1000);
- connect(timer, SIGNAL(timeout()), this, SLOT(checkTime()));
- timer->start();
- }
-
- MainWindow::~MainWindow()
- {
- delete ui;
- delete set;
- delete tray;
- delete widStatus;
- }
-
- void MainWindow::readyRead()
- {
- QTcpSocket* socket=(QTcpSocket*)sender();
- buffer+=socket->readAll();
- if(!buffer.endsWith("\n"))
- return;
- if(status==Send::HELO)
- {
- if(buffer.startsWith("220"))
- {
- status=Send::AUTH;
- buffer.clear();
- socket->write("HELO there\n");
- }
- else
- showError("Réponse inconnue du serveur (1)", socket);
- return;
- }
- else if(status==Send::AUTH)
- {
- if(buffer.startsWith("250"))
- {
- status=Send::MAIL_FROM;
- buffer.clear();
- widStatus->showStatus("Connecté. Authentification...");
- socket->write("auth plain "+QByteArray(QByteArray("\x00", 1)+user().toStdString().c_str()+QByteArray("\x00", 1)+pass().toStdString().c_str()).toBase64()+"\n");
- }
- else
- showError("Réponse inconnue du serveur (2)", socket);
- return;
- }
- else if(status==Send::MAIL_FROM)
- {
- if(buffer.startsWith("235"))
- {
- buffer.clear();
- if(sendType!=Send::TEST_PARAMS)
- {
- status=Send::RCPT_TO;
- if(sendType!=Send::SEND_ME_RCPT)
- widStatus->showStatus("Authentifié. Envoi du mail...");
- else if(sendType==Send::SEND_ME_RCPT)
- widStatus->showStatus("Authentifié. Envoi des mails...");
- socket->write(QString("MAIL FROM:<"+user()+">\n").toStdString().c_str());
- }
- else if(sendType==Send::TEST_PARAMS)
- {
- status=Send::DISCO;
- widStatus->showStatus("Compte mail OK");
- socket->write("quit\n");
- }
- }
- else
- showError("Mauvais mail ou mot de passe", socket);
- return;
- }
- else if(status==Send::RCPT_TO)
- {
- if(buffer.startsWith("250"))
- {
- status=Send::DATA;
- buffer.clear();
- if(sendType==Send::SEND_RCPT)
- socket->write(QString("RCPT TO:<"+rcpt()+">\n").toStdString().c_str());
- else if(sendType==Send::SEND_ME)
- socket->write(QString("RCPT TO:<"+user()+">\n").toStdString().c_str());
- else if(sendType==Send::SEND_ME_RCPT)
- socket->write(QString("RCPT TO:<"+rcpt()+">\nRCPT TO:<"+user()+">\n").toStdString().c_str());
- }
- else
- showError("Expediteur non valide", socket);
- return;
- }
- else if(status==Send::DATA)
- {
- if(buffer.startsWith("250"))
- {
- status=Send::SENDING_DATA;
- buffer.clear();
- socket->write("DATA\n");
- }
- else
- showError("Destinataire on valide", socket);
- return;
- }
- else if(status==Send::SENDING_DATA)
- {
- if(buffer.startsWith("354"))
- {
- buffer.clear();
- QString bound=boundary(15);
- QString sjt_enc="=?UTF-8?B?"+sjt().toUtf8().toBase64()+"?=";
- QString body_enc=body().toUtf8().toBase64();
-
- socket->write(QString("Subject: "+sjt_enc+"\r\n").toStdString().c_str());
- socket->write(QString("From: <"+user()+">\r\n").toStdString().c_str());
- if(sendType==Send::SEND_RCPT)
- socket->write(QString("To: <"+rcpt()+">\r\n").toStdString().c_str());
- else if(sendType==Send::SEND_ME)
- socket->write(QString("To: <"+user()+">\r\n").toStdString().c_str());
- else if(sendType==Send::SEND_ME_RCPT)
- socket->write(QString("To: <"+rcpt()+"> <"+user()+">\r\n").toStdString().c_str());
- socket->write("MIME-Version: 1.0\r\n");
- socket->write(QString("Content-Type: multipart/mixed; boundary=\""+bound+"\"\r\n").toStdString().c_str());
- socket->write(QString("Date: "+QDateTime::currentDateTime().toString("ddd, d MMM yyyy hh:mm:ss +0200")+"\r\n").toStdString().c_str());
- socket->write("\r\n");
-
- socket->write(QString("--"+bound+"\r\n").toStdString().c_str());
- socket->write("Content-Type: text/html; charset=\"UTF-8\"\r\n");
- socket->write("Content-Transfer-Encoding: base64\r\n");
- socket->write("\r\n");
- socket->write(QString(body_enc+"\r\n").toStdString().c_str());
- socket->write("\r\n");
-
- QFile file(filePath().replace("\\", "/"));
-
- if(file.exists()&&file.open(QIODevice::ReadOnly))
- {
- widStatus->showStatus("Envoi de la pièce jointe: 0%...");
- socket->write(QString("--"+bound+"\r\n").toStdString().c_str());
- QString filePath_enc="=?UTF-8?B?"+filePath().split("/").last().toUtf8().toBase64()+"?=";
- QString mime="application/octet-stream";
- if(filePath().contains(QRegExp("\\.xls[x]{0,1}$")))
- mime="application/vnd.ms-excel";
- if(filePath().contains(QRegExp("\\.doc[x]{0,1}$")))
- mime="application/vnd.msword";
- if(filePath().contains(QRegExp("\\.pdf$")))
- mime="application/pdf";
-
-
- socket->write(QString("Content-Type: "+mime+"\r\n").toStdString().c_str());
- socket->write("Content-Transfer-Encoding: base64\r\n");
- socket->write(QString("Content-Disposition: attachment; filename=\""+filePath_enc+"\"\r\n").toStdString().c_str());
- socket->write("\r\n");
- int p=0;
- QByteArray data=file.readAll();
- data=data.toBase64();
- for(int i=0;i<data.size();i++)
- {
- if(i*100/data.size()!=p)
- {
- p=i*100/data.size();
- widStatus->showStatus("Envoi de la pièce jointe: "+QString::number(p)+"%...");
- }
- socket->write(QByteArray().append(data.at(i)));
- while(socket->waitForBytesWritten(50))
- qApp->processEvents();
-
- }
- socket->write("\r\n\r\n");
-
- }
- else
- {
- showError("Fichier imossible à ouvrir", socket);
- return;
- }
- socket->write(QString("--"+bound+"--\r\n").toStdString().c_str());
-
- status=Send::QUIT;
- socket->write(".\r\n");
- }
- else if(sendType==Send::SEND_ME_RCPT)
- {
- if(!buffer.startsWith("250"))
- showError("Expediteur non valide", socket);
- buffer.clear();
- }
- else
- showError("Impossible d'envoyer le corps du mail", socket);
- return;
- }
- else if(status==Send::QUIT)
- {
- if(buffer.startsWith("250"))
- {
- status=Send::DISCO;
- buffer.clear();
- if(sendType!=Send::SEND_ME_RCPT)
- widStatus->showStatus("Mail envoyé. Déconnection...");
- else if(sendType==Send::SEND_ME_RCPT)
- widStatus->showStatus("Mails envoyés. Déconnection...");
- socket->write("quit\n");
- }
- else
- showError("Données invalides envoyées", socket);
- return;
- }
- else if(status==Send::DISCO)
- {
- if(buffer.startsWith("221"))
- {
- setEnabled(true);
- if(sendType==Send::TEST_PARAMS)
- widStatus->showSuccess("Compte mail valide");
- else if(sendType==Send::SEND_ME_RCPT)
- widStatus->showSuccess("Mails tests envoyés");
- else
- widStatus->showSuccess("Mail test envoyé");
- buffer.clear();
- socket->disconnect();
- socket->deleteLater();
- }
- else
- showError("Commande de déconnection refusée", socket);
- return;
- }
- }
-
- void MainWindow::error(QAbstractSocket::SocketError)
- {
- widStatus->show();
- widStatus->showError(((QTcpSocket*)sender())->errorString());
- }
-
- QString MainWindow::boundary(int lenght)
- {
- QString chars="AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn0123456789";
- QString b="";
- for(int l=0;l<lenght;l++)
- b+=chars.at(qMax(qMin(((double)chars.size()-1), ((double)rand())*chars.size()/RAND_MAX), (double)0));
-
- return "_"+b+"_";
- }
-
- void MainWindow::trayActivated(QSystemTrayIcon::ActivationReason r)
- {
- if(r!=QSystemTrayIcon::Context)
- show();
- }
-
- void MainWindow::on_grpFilePath_toggled(bool arg1)
- {
- if(!arg1)
- ui->lineFilePath->clear();
-
- }
-
- void MainWindow::on_btnBrowseFilePath_clicked()
- {
- QString file=QFileDialog::getOpenFileName(this, "Fichier à joindre...");
- if(!file.isEmpty())
- ui->lineFilePath->setText(file);
- }
-
- void MainWindow::on_buttonBox_accepted()
- {
- set->setValue("User", ui->lineUser->text());
- set->setValue("Pass", ui->linePass->text());
- set->setValue("Rcpt", ui->lineRcpt->text());
- set->setValue("FilePath", ui->lineFilePath->text());
- set->setValue("Sjt", ui->lineSjt->text());
- set->setValue("Body", ui->lineBody->toHtml());
- set->setValue("Day", ui->comboDay->currentIndex());
- set->setValue("Hour", ui->lineHour->time());
- }
-
- void MainWindow::send()
- {
- if(!isEnabled())
- return;
- setEnabled(false);
- widStatus->show();
- widStatus->showStatus("Connection...");
- status=Send::HELO;
- QTcpSocket* sock=new QTcpSocket(this);
- connect(sock, SIGNAL(readyRead()), this, SLOT(readyRead()));
- connect(sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
- sock->connectToHost("smtpauth.orange.fr", 25);
- }
-
- void MainWindow::setupUI()
- {
- ui->lineUser->setText(user());
- ui->linePass->setText(pass());
- ui->lineRcpt->setText(rcpt());
- ui->lineFilePath->setText(filePath());
- ui->lineSjt->setText(sjt());
- ui->lineBody->setHtml(body());
- ui->grpFilePath->setChecked(!filePath().isEmpty());
- ui->comboDay->setCurrentIndex(day());
- ui->lineHour->setTime(hour());
- }
-
- void MainWindow::on_buttonBox_rejected()
- {
- setupUI();
- }
-
- void MainWindow::closeEvent(QCloseEvent *e)
- {
- if(!qApp->arguments().contains("-indev"))
- {
- e->ignore();
- hide();
- }
- else
- e->accept();
- }
-
- void MainWindow::keyPressEvent(QKeyEvent *e)
- {
- if(e->key()==Qt::Key_Return||e->key()==Qt::Key_Enter)
- on_buttonBox_accepted();
- }
-
- void MainWindow::checkTime()
- {
- QDateTime next=QDateTime::currentDateTime();
- while(next.date().dayOfWeek()!=day()+1)
- next=next.addDays(1);
- if(QDateTime::currentDateTime().time()>hour())
- next=next.addDays(7);
- next.setTime(hour());
-
- int remaining=QDateTime::currentDateTime().secsTo(next);
- QTime re;
- re=re.addSecs(remaining);
- if(remaining==3599)
- widStatus->show();
- if(remaining<=3599&&remaining>3585)
- widStatus->showRemainingTime(re);
- else if(remaining==3585)
- widStatus->hide();
-
- else if(remaining==1800)
- widStatus->show();
- if(remaining<=1800&&remaining>1785)
- widStatus->showRemainingTime(re);
- else if(remaining==1785)
- widStatus->hide();
-
- else if(remaining==600)
- widStatus->show();
- if(remaining<=600)
- {
- widStatus->showRemainingTime(re);
- if(remaining==0)
- {
- sendType=Send::SEND_RCPT;
- send();
- }
- }
-
- //qDebug()<<"Current:"<<QDateTime::currentDateTime()<<"Next:"<<remaining;
- }
-
- void MainWindow::showError(QString erreur, QTcpSocket *socket)
- {
- qDebug()<<"ERREUR:"<<buffer;
- setEnabled(true);
- widStatus->show();
- widStatus->showError(erreur);
- socket->disconnect();
- socket->deleteLater();
- buffer.clear();
- }
-
- void MainWindow::on_btnTestUser_clicked()
- {
- on_buttonBox_accepted();
- sendType=Send::TEST_PARAMS;
- send();
- }
-
- void MainWindow::on_btnTestMail_clicked()
- {
- on_buttonBox_accepted();
- DlgMailTest* test=new DlgMailTest(this);
- if(test->exec()==QDialog::Accepted)
- {
- if(test->getUi()->radioMe->isChecked())
- sendType=Send::SEND_ME;
- else if(test->getUi()->radioMeRcpt->isChecked())
- sendType=Send::SEND_ME_RCPT;
- else if(test->getUi()->radioRcpt->isChecked())
- sendType=Send::SEND_RCPT;
- send();
- }
- }
-
- void MainWindow::on_lblBody_linkActivated(const QString &link)
- {
- if(link=="richText")
- {
- DlgRichText* t=new DlgRichText(this);
- t->setText(ui->lineBody->toHtml());
- if(t->exec()==QDialog::Accepted)
- ui->lineBody->setHtml(t->getText());
- t->deleteLater();
- }
- }
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
srand(QDateTime::currentDateTime().toTime_t());
set=new QSettings("options.ini", QSettings::IniFormat, this);
tray=new QSystemTrayIcon(QIcon(":/Mail.png"), this);
tray->show();
connect(tray, SIGNAL(messageClicked()), this, SLOT(show()));
connect(tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason)));
tray->setContextMenu(new QMenu("Menu", this));
connect(tray->contextMenu()->addAction("Afficher"), SIGNAL(triggered()), this, SLOT(show()));
connect(tray->contextMenu()->addAction("Quitter"), SIGNAL(triggered()), qApp, SLOT(quit()));
widStatus=new WidStatus();
setupUI();
show();
QTimer* timer=new QTimer(this);
timer->setInterval(1000);
connect(timer, SIGNAL(timeout()), this, SLOT(checkTime()));
timer->start();
}
MainWindow::~MainWindow()
{
delete ui;
delete set;
delete tray;
delete widStatus;
}
void MainWindow::readyRead()
{
QTcpSocket* socket=(QTcpSocket*)sender();
buffer+=socket->readAll();
if(!buffer.endsWith("\n"))
return;
if(status==Send::HELO)
{
if(buffer.startsWith("220"))
{
status=Send::AUTH;
buffer.clear();
socket->write("HELO there\n");
}
else
showError("Réponse inconnue du serveur (1)", socket);
return;
}
else if(status==Send::AUTH)
{
if(buffer.startsWith("250"))
{
status=Send::MAIL_FROM;
buffer.clear();
widStatus->showStatus("Connecté. Authentification...");
socket->write("auth plain "+QByteArray(QByteArray("\x00", 1)+user().toStdString().c_str()+QByteArray("\x00", 1)+pass().toStdString().c_str()).toBase64()+"\n");
}
else
showError("Réponse inconnue du serveur (2)", socket);
return;
}
else if(status==Send::MAIL_FROM)
{
if(buffer.startsWith("235"))
{
buffer.clear();
if(sendType!=Send::TEST_PARAMS)
{
status=Send::RCPT_TO;
if(sendType!=Send::SEND_ME_RCPT)
widStatus->showStatus("Authentifié. Envoi du mail...");
else if(sendType==Send::SEND_ME_RCPT)
widStatus->showStatus("Authentifié. Envoi des mails...");
socket->write(QString("MAIL FROM:<"+user()+">\n").toStdString().c_str());
}
else if(sendType==Send::TEST_PARAMS)
{
status=Send::DISCO;
widStatus->showStatus("Compte mail OK");
socket->write("quit\n");
}
}
else
showError("Mauvais mail ou mot de passe", socket);
return;
}
else if(status==Send::RCPT_TO)
{
if(buffer.startsWith("250"))
{
status=Send::DATA;
buffer.clear();
if(sendType==Send::SEND_RCPT)
socket->write(QString("RCPT TO:<"+rcpt()+">\n").toStdString().c_str());
else if(sendType==Send::SEND_ME)
socket->write(QString("RCPT TO:<"+user()+">\n").toStdString().c_str());
else if(sendType==Send::SEND_ME_RCPT)
socket->write(QString("RCPT TO:<"+rcpt()+">\nRCPT TO:<"+user()+">\n").toStdString().c_str());
}
else
showError("Expediteur non valide", socket);
return;
}
else if(status==Send::DATA)
{
if(buffer.startsWith("250"))
{
status=Send::SENDING_DATA;
buffer.clear();
socket->write("DATA\n");
}
else
showError("Destinataire on valide", socket);
return;
}
else if(status==Send::SENDING_DATA)
{
if(buffer.startsWith("354"))
{
buffer.clear();
QString bound=boundary(15);
QString sjt_enc="=?UTF-8?B?"+sjt().toUtf8().toBase64()+"?=";
QString body_enc=body().toUtf8().toBase64();
socket->write(QString("Subject: "+sjt_enc+"\r\n").toStdString().c_str());
socket->write(QString("From: <"+user()+">\r\n").toStdString().c_str());
if(sendType==Send::SEND_RCPT)
socket->write(QString("To: <"+rcpt()+">\r\n").toStdString().c_str());
else if(sendType==Send::SEND_ME)
socket->write(QString("To: <"+user()+">\r\n").toStdString().c_str());
else if(sendType==Send::SEND_ME_RCPT)
socket->write(QString("To: <"+rcpt()+"> <"+user()+">\r\n").toStdString().c_str());
socket->write("MIME-Version: 1.0\r\n");
socket->write(QString("Content-Type: multipart/mixed; boundary=\""+bound+"\"\r\n").toStdString().c_str());
socket->write(QString("Date: "+QDateTime::currentDateTime().toString("ddd, d MMM yyyy hh:mm:ss +0200")+"\r\n").toStdString().c_str());
socket->write("\r\n");
socket->write(QString("--"+bound+"\r\n").toStdString().c_str());
socket->write("Content-Type: text/html; charset=\"UTF-8\"\r\n");
socket->write("Content-Transfer-Encoding: base64\r\n");
socket->write("\r\n");
socket->write(QString(body_enc+"\r\n").toStdString().c_str());
socket->write("\r\n");
QFile file(filePath().replace("\\", "/"));
if(file.exists()&&file.open(QIODevice::ReadOnly))
{
widStatus->showStatus("Envoi de la pièce jointe: 0%...");
socket->write(QString("--"+bound+"\r\n").toStdString().c_str());
QString filePath_enc="=?UTF-8?B?"+filePath().split("/").last().toUtf8().toBase64()+"?=";
QString mime="application/octet-stream";
if(filePath().contains(QRegExp("\\.xls[x]{0,1}$")))
mime="application/vnd.ms-excel";
if(filePath().contains(QRegExp("\\.doc[x]{0,1}$")))
mime="application/vnd.msword";
if(filePath().contains(QRegExp("\\.pdf$")))
mime="application/pdf";
socket->write(QString("Content-Type: "+mime+"\r\n").toStdString().c_str());
socket->write("Content-Transfer-Encoding: base64\r\n");
socket->write(QString("Content-Disposition: attachment; filename=\""+filePath_enc+"\"\r\n").toStdString().c_str());
socket->write("\r\n");
int p=0;
QByteArray data=file.readAll();
data=data.toBase64();
for(int i=0;i<data.size();i++)
{
if(i*100/data.size()!=p)
{
p=i*100/data.size();
widStatus->showStatus("Envoi de la pièce jointe: "+QString::number(p)+"%...");
}
socket->write(QByteArray().append(data.at(i)));
while(socket->waitForBytesWritten(50))
qApp->processEvents();
}
socket->write("\r\n\r\n");
}
else
{
showError("Fichier imossible à ouvrir", socket);
return;
}
socket->write(QString("--"+bound+"--\r\n").toStdString().c_str());
status=Send::QUIT;
socket->write(".\r\n");
}
else if(sendType==Send::SEND_ME_RCPT)
{
if(!buffer.startsWith("250"))
showError("Expediteur non valide", socket);
buffer.clear();
}
else
showError("Impossible d'envoyer le corps du mail", socket);
return;
}
else if(status==Send::QUIT)
{
if(buffer.startsWith("250"))
{
status=Send::DISCO;
buffer.clear();
if(sendType!=Send::SEND_ME_RCPT)
widStatus->showStatus("Mail envoyé. Déconnection...");
else if(sendType==Send::SEND_ME_RCPT)
widStatus->showStatus("Mails envoyés. Déconnection...");
socket->write("quit\n");
}
else
showError("Données invalides envoyées", socket);
return;
}
else if(status==Send::DISCO)
{
if(buffer.startsWith("221"))
{
setEnabled(true);
if(sendType==Send::TEST_PARAMS)
widStatus->showSuccess("Compte mail valide");
else if(sendType==Send::SEND_ME_RCPT)
widStatus->showSuccess("Mails tests envoyés");
else
widStatus->showSuccess("Mail test envoyé");
buffer.clear();
socket->disconnect();
socket->deleteLater();
}
else
showError("Commande de déconnection refusée", socket);
return;
}
}
void MainWindow::error(QAbstractSocket::SocketError)
{
widStatus->show();
widStatus->showError(((QTcpSocket*)sender())->errorString());
}
QString MainWindow::boundary(int lenght)
{
QString chars="AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn0123456789";
QString b="";
for(int l=0;l<lenght;l++)
b+=chars.at(qMax(qMin(((double)chars.size()-1), ((double)rand())*chars.size()/RAND_MAX), (double)0));
return "_"+b+"_";
}
void MainWindow::trayActivated(QSystemTrayIcon::ActivationReason r)
{
if(r!=QSystemTrayIcon::Context)
show();
}
void MainWindow::on_grpFilePath_toggled(bool arg1)
{
if(!arg1)
ui->lineFilePath->clear();
}
void MainWindow::on_btnBrowseFilePath_clicked()
{
QString file=QFileDialog::getOpenFileName(this, "Fichier à joindre...");
if(!file.isEmpty())
ui->lineFilePath->setText(file);
}
void MainWindow::on_buttonBox_accepted()
{
set->setValue("User", ui->lineUser->text());
set->setValue("Pass", ui->linePass->text());
set->setValue("Rcpt", ui->lineRcpt->text());
set->setValue("FilePath", ui->lineFilePath->text());
set->setValue("Sjt", ui->lineSjt->text());
set->setValue("Body", ui->lineBody->toHtml());
set->setValue("Day", ui->comboDay->currentIndex());
set->setValue("Hour", ui->lineHour->time());
}
void MainWindow::send()
{
if(!isEnabled())
return;
setEnabled(false);
widStatus->show();
widStatus->showStatus("Connection...");
status=Send::HELO;
QTcpSocket* sock=new QTcpSocket(this);
connect(sock, SIGNAL(readyRead()), this, SLOT(readyRead()));
connect(sock, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError)));
sock->connectToHost("smtpauth.orange.fr", 25);
}
void MainWindow::setupUI()
{
ui->lineUser->setText(user());
ui->linePass->setText(pass());
ui->lineRcpt->setText(rcpt());
ui->lineFilePath->setText(filePath());
ui->lineSjt->setText(sjt());
ui->lineBody->setHtml(body());
ui->grpFilePath->setChecked(!filePath().isEmpty());
ui->comboDay->setCurrentIndex(day());
ui->lineHour->setTime(hour());
}
void MainWindow::on_buttonBox_rejected()
{
setupUI();
}
void MainWindow::closeEvent(QCloseEvent *e)
{
if(!qApp->arguments().contains("-indev"))
{
e->ignore();
hide();
}
else
e->accept();
}
void MainWindow::keyPressEvent(QKeyEvent *e)
{
if(e->key()==Qt::Key_Return||e->key()==Qt::Key_Enter)
on_buttonBox_accepted();
}
void MainWindow::checkTime()
{
QDateTime next=QDateTime::currentDateTime();
while(next.date().dayOfWeek()!=day()+1)
next=next.addDays(1);
if(QDateTime::currentDateTime().time()>hour())
next=next.addDays(7);
next.setTime(hour());
int remaining=QDateTime::currentDateTime().secsTo(next);
QTime re;
re=re.addSecs(remaining);
if(remaining==3599)
widStatus->show();
if(remaining<=3599&&remaining>3585)
widStatus->showRemainingTime(re);
else if(remaining==3585)
widStatus->hide();
else if(remaining==1800)
widStatus->show();
if(remaining<=1800&&remaining>1785)
widStatus->showRemainingTime(re);
else if(remaining==1785)
widStatus->hide();
else if(remaining==600)
widStatus->show();
if(remaining<=600)
{
widStatus->showRemainingTime(re);
if(remaining==0)
{
sendType=Send::SEND_RCPT;
send();
}
}
//qDebug()<<"Current:"<<QDateTime::currentDateTime()<<"Next:"<<remaining;
}
void MainWindow::showError(QString erreur, QTcpSocket *socket)
{
qDebug()<<"ERREUR:"<<buffer;
setEnabled(true);
widStatus->show();
widStatus->showError(erreur);
socket->disconnect();
socket->deleteLater();
buffer.clear();
}
void MainWindow::on_btnTestUser_clicked()
{
on_buttonBox_accepted();
sendType=Send::TEST_PARAMS;
send();
}
void MainWindow::on_btnTestMail_clicked()
{
on_buttonBox_accepted();
DlgMailTest* test=new DlgMailTest(this);
if(test->exec()==QDialog::Accepted)
{
if(test->getUi()->radioMe->isChecked())
sendType=Send::SEND_ME;
else if(test->getUi()->radioMeRcpt->isChecked())
sendType=Send::SEND_ME_RCPT;
else if(test->getUi()->radioRcpt->isChecked())
sendType=Send::SEND_RCPT;
send();
}
}
void MainWindow::on_lblBody_linkActivated(const QString &link)
{
if(link=="richText")
{
DlgRichText* t=new DlgRichText(this);
t->setText(ui->lineBody->toHtml());
if(t->exec()==QDialog::Accepted)
ui->lineBody->setHtml(t->getText());
t->deleteLater();
}
}
Conclusion
Cette source peut donc servir de base pour implémenter le protocole (A)SMTP, ou simplement une action hebdomadaire. En espérant que ça aide quelqu'un ;)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
SMTP.... [ par B2K ]
Bonjour,J'aimerais savoir comment peut-on envoyer un mail, en C++J'ai essayé avec les sources que j'ai trouvé dans "Réseau Internet" mais ça ne marche
QT Designer [ par BisonFute ]
Bon sa serais juste pour savoir si qqu'un s'y connais en QT Designer car j'arrive pas a faire plusieurs truc donc si qqu'un a le courage de m'aider et
bases de l'utilisation de VC++ (suis nul et je pige pas) [ par lmondeil ]
Light. Je suis nul mais je me soigne!salut tout le monde. J'ai un souci avec la manipulation de Visual C++ 6 :Je dois bosser sout VC++ en utilisant QT
Information Serveur Smtp [ par Kotei ]
Je cherche des info. pour creer un serveur STMP, quelqu'un a une idee pour en faire unMerci ca fais 1 semaine ke je sui dessus snif
Horloge [ par djamine ]
Bonjour a tout le mondeje suis entrain de faire un programme trés anncien en Cc'est d'afficher l'heure comme ça (hh.mn.sc) quand les secondes atteindr
programmation qt [ par vedder ]
Bonjour jje develope actuellement une application linux sous kdevelop et j'aimerais faire fonctionner deux fonctionnalites :1/ j'aimerais afficher une
recuperation du nom du serveur SMTP local non virtuel de IIS [ par godmajestic ]
SalutJ'aimerais recuperer le nom du serveur SMTP de la machine local, pour faire un envoi de mail a patir de celui ci!La plupart des programmes d'envo
api multicast [ par NADA114 ]
Bonjour, Je veux faire une diffusion de message entre serveurs et clients en C++(plus plus) et en utilisant QT . Cependant QT ne supporte ni le mul
Programmation QT, besoin d'aide URGENT!!! [ par D1m3x ]
Salut tout le monde,est-ce que quelqu'un sait me dire où je peux trouver de l'aide QT en français??? car j'ai fait un projet et grace à ce bout de cod
QT win32 et vc++6.0 [ par MoDDiB ]
J'ai cree une dialogbox avec une editbox dedans grace au ressource de vc++.J'obtiens donc un id (IDC_PASS par ex)Mais le blem c'est que lorsque je veu
|
Derniers Blogs
VMMAP EN MODE INSTRUMENTATION SUR SYSTèME 64BIT : ATTENTION à LA PLATEFORME CIBLE DU BUILD .NETVMMAP EN MODE INSTRUMENTATION SUR SYSTèME 64BIT : ATTENTION à LA PLATEFORME CIBLE DU BUILD .NET par coq
Si vous tentez d'utiliser VMMap en mode instrumentation* vous avez peut-être rencontré une erreur relativement peu explicite au lancement du profiling : Unable to launch application: "E:\Temp\ApplicationToProfile\ApplicationToProfile\bi...
Cliquez pour lire la suite de l'article par coq ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0 par Philess
L'extensibilité du Team Web Access
Le Web Access (site d'équipe) de Team Foundation Server a été complètement réécrit dans la version 2012 avec pas moins de 400.000 lignes de JavaScript. Ce nouveau modèle a été pensé pour offrir de grandes...
Cliquez pour lire la suite de l'article par Philess SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Forum
INDEX D'UN LIVRE INDEX D'UN LIVRE par sahnounm91
Cliquez pour lire la suite par sahnounm91 MéMORY EN C++MéMORY EN C++ par C6Dj
Cliquez pour lire la suite par C6Dj
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|