Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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:

merci, hat mir sehr geholfen.

:D

TinTin

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

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:

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

Evtl. reagiert Outlook anders als Netscape.

liegt wohl an WIN98, unter win2k gehts, weiß der teufel warum!

danke und Ciao

TinTin

:rolleyes:

Ist es eigentlich auch möglich die E-Mail mit ShellExecute gleich zu senden ????

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.

Falls du das Beispiel mit den Sockets finden solltest, könntest du es ja mal in Forum stellen. Wäre sicherlich interessant !!!

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 !

}

THX

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.

@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.

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.