Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi,

ich such eine möglichkeit per mausklick eine neue mail mit vorbelegter empfaengeradresse über den standard client zu erzeugen. Soll folgendermassen aussehen, dass man im about dialog eines proggys auf links klickt. zum einen sowas wie mailto:irgendwer@irgendwo.com und zum anderen eine url, die dann im standard browser angezeigt wird.

ist warscheinleich ne banale frage, aber ich komme nicht weiter

ciao TinTin

:confused:

Geschrieben

kann ich denn auch ein subject oder body für die mail mit übergeben? das format:

'irgendwer@irgendwo.de?subject=irgendwas'

scheint nicht zu funktionieren. wie kann ich die inhalte sonnst übergeben?

ciao

TinTin

:WD

Geschrieben

hi, hab dass hier probiert:

void CAboutDlg::OnMail()

{

ShellExecute ( NULL, "open", "mailto:Klotzkopp0@compuserve.de?subject=foo&body=bar", NULL, NULL, 0 );

}

und das kommt dabei raus. so sieht die outlookexpress adressleiste aus.

hier klicken!!

mail.jpg

woran das wohl liegt?

:confused:

Geschrieben

Wahrscheinlich liegt es an dem verwendeten Mail-Client ob das subject und body der Kommandozeile richtig "übersetzt" werden.

Evtl. reagiert Outlook anders als Netscape.

Geschrieben

bei mir liegt noch irgendwo verstaubt ne methode, die über sockets e-mails versendet.

damit bist du dann unabhängig von irgendwelchen clients , es muss natürlich lediglich der tcp/ip-stack installiert sein.

das beispiel greift auf mfc-socket-objekte zurück und ist recht simpel.

Geschrieben

Also schön...is zwar eine eigene zusammengeschusterte Methode, aber sie funtz *ggg*

BOOL CMontagenVersandView::MailSenden(int nListenIndex)

{

////////// Bearbeiter KZ ermitteln ////////////////

CString sWemoNr;

CString sBetreff; // Betreff sagt aus welche Wemo versandbereit ist

CString SQLstr; // über SQL-Statement ermitteln, welcher Bearbeiter gewählt wurde

CString MailTo;

CString sEmail; // E-Mail-Adresse des Bearbeiters wird hier gespeichert

CString sFrom; // Mail von....

CString sDatum; // Datum und Uhrzeit der Mail hier festhalten

CString sHeader; // in diesen String kompletten Header schreiben

CString sTemp; // temporärer String erzeugen, für weitere Messages an den Server

CTime sTime; // String für Zeitangaben des lokalen Systems

sWemoNr=m_ctrListe.GetItemText(nListenIndex,0); // WemoNr der gewählten Wemo

///////// E-Mail über die KZ ermitteln ////////////

SQLstr="SELECT * FROM [dbo].[MontageDaten] WHERE WemoNr=";

SQLstr+=sWemoNr;

m_MontageDaten->Open(AFX_DB_USE_DEFAULT_TYPE,SQLstr);

SQLstr="SELECT * FROM [dbo].[emailBearbeiter] WHERE KZ=";

SQLstr+=m_MontageDaten->m_BeaKz;

m_MontageDaten->Close();

sBetreff="Wemo "; // Betreffstring generieren

sBetreff+=sWemoNr;

sBetreff+=" ist versandbereit !";

m_EMailListe->Open(AFX_DB_USE_DEFAULT_TYPE,SQLstr);

sEmail=m_EMailListe->m_EMail ; // Mail-Adresse in String schreiben

m_EMailListe->Close(); // Abfrage schliessen

//////////////////////////////////////////////////////////////////////////////////

///////// MAIL GENERIEREN ////////////////////

//////////////////////////////////////////////////////////////////////////////////

//////////// alle benötigten Variablen deklarieren ////////////

char lokaler_PC[80]; // String für den lokalen Rechnernamen

char m_ansbuf[1024]; // Fehlerpuffer für Server deklarieren

CString sHello; // Aufrufstring für Mail-Server

if(AfxSocketInit()==0) // Sockets initialisieren

{

MessageBox("Sockets konnten nicht eingerichtet werden ! Evtl. fehlender TCP/IP-Stack!");

return FALSE; // zurück

}

CSocket m_Server; // erforderliches Socket-Objekt einrichten

if(!m_Server.Create()) // Abfragen, ob Objekt erstellt werden konnte

{

MessageBox("Create des Sockets fehlgeschlagen! Initialisierungsfehler der Sockets !"); // Socket erstellen

return FALSE;

}

if(!m_Server.Connect("192.168.100.10",25)) // unser E-Mail-Server mit Port 25(SMTP)

{

MessageBox("Connect zu Server fehlgeschlagen! Falsche IP oder Portnummer !"); // Connection aufgerufen

m_Server.Close();

return FALSE;

}

/////////// HALLO MODUL ///////////////////////////////

gethostname( lokaler_PC, 80 ); // lokaler PC-Name in String schreiben

sHello.Format("HELO %s\r\n", (LPCTSTR)lokaler_PC);

m_Server.Send((LPCTSTR)sHello, sHello.GetLength() ); // Hallo senden

if(m_Server.Receive(m_ansbuf,1024)==SOCKET_ERROR) // Bestätigung vom Server holen (notwendig !!)

{

MessageBox("Fehler beim HELO");

m_Server.Close();

return FALSE;

}

////////// MAIL FROM MODUL /////////////////////////

sFrom.Format( "MAIL From: <%s>\r\n", "Lager"); // VON

m_Server.Send( (LPCTSTR)sFrom, sFrom.GetLength() );

if(m_Server.Receive(m_ansbuf,1024)==SOCKET_ERROR) //

{

MessageBox("Fehler bei Mail From !");

m_Server.Close();

return FALSE;

}

////////// RCPT TO MODUL ///////////////////////////////

MailTo.Format("RCPT TO: <%s>\r\n", (LPCTSTR)sEmail ); // AN

m_Server.Send( (LPCTSTR)MailTo, MailTo.GetLength() );

if( m_Server.Receive( m_ansbuf, 1024 ) == SOCKET_ERROR )

{

MessageBox("Fehler bei RCPT TO !");

m_Server.Close();

return FALSE;

}

/////////////// DATEN MODUL //////////////////////////

sTemp = "DATA\r\n";

m_Server.Send( (LPCTSTR)sTemp, sTemp.GetLength() );

if( m_Server.Receive( m_ansbuf, 1024 ) == SOCKET_ERROR ) // Datensignal

{

MessageBox("Fehler bei DATA !");

m_Server.Close();

return FALSE;

}

//////////// KOPF MODUL //////////////////

sTime=sTime.GetCurrentTime(); // aktuelle Systemzeit ermitteln

sDatum=sTime.Format( "%a, %d %b %y %H:%M:%S %Z" ); // Für Server formatieren

sHeader.Format( "Date: %s\r\n"\

"From: %s\r\n"\

"To: %s\r\n"\

"Subjekt: %s\r\n"\

"MM-Mailer: <%s>\r\n\r\n",

(LPCTSTR)sDatum,

(LPCTSTR)sBetreff,

(LPCTSTR)MailTo,

(LPCTSTR)sWemoNr,

"MontageManager Mail" );

m_Server.Send( (LPCTSTR)sHeader, sHeader.GetLength() ); // Kopf senden

///////////// ENDE MODUL /////////////////////////////

sTemp = "\r\n.\r\n";

m_Server.Send( (LPCTSTR)sTemp, sTemp.GetLength() );

if( m_Server.Receive( m_ansbuf, 1024 ) == SOCKET_ERROR ) // Endesignal senden

{

MessageBox("Error beim END");

m_Server.Close();

return FALSE;

}

m_Server.Close(); // Socket schliessen

return TRUE; // Mail erfolgreich versand !

}

Geschrieben

Ein schönes Beispiel für einen SMTP-Client :)

Nur eine Anmerkung: Das Programm prüft zwar, ob der SMTP-Server eine Antwort auf HELO, MAIL FROM, RCPT TO usw. sendet, aber es scheint nicht den Inhalt der Antwort zu prüfen.

Die Antwort beginnt immer mit einer Zahl, die wiedergibt, ob die Eingabe gültig war. 250 bedeutet m.W. OK, alles über 400 ist ein Fehler.

Geschrieben

@Klotzkopp:

Richtig, die Methode prüft nur, ob der nächste Schritt ausgeführt werden kann...

Damals war keine Zeit mehr dies einzubauen :WD

Aber jeder kann sich die SMTP-Spezifikationen durchlesen und die Fehlercodes abfangen.

Geschrieben

gethostname() reicht im allgemeinen nicht aus.

Im SMTP Hello Kommando sollte nach Hello der Name der Domäne des Absenders stehen. Um den zu bekommen muß man mit dem lokalen Rechnernamen den gethostname() liefert, die funktion gethostbyname füttern. (liefert für den namen etwa host1.domaene.com)

Näheres in der winsock2 api.

Wenn es trotzdem funktioniert, dann weil es den meisten SMTP MTA (mail transfer agent) egal ist was hinterm Hello steht. Das heißt es wird von ihnen nicht überprüft, ob das tatsächlich eine existierende Domäne ist.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...