Autor Thema: Aus einer URL die zugehörige Mail erhalten?  (Gelesen 4713 mal)

Offline DaHias

  • Aktives Mitglied
  • ***
  • Beiträge: 132
Aus einer URL die zugehörige Mail erhalten?
« am: 03.11.09 - 08:29:47 »
Hi zusammen,

Ich stehe vor folgendem Problem: Ich will an einer Stelle Mails per Drag&Drop fallen lassen und dort eben anstatt der URL zu der Mail das Notes-Document haben. Aber wie mache ich das?

Code
public void drop(DropTargetEvent event)
		    {	 
		    	
		    	final String[] sourceNames = (String[]) event.data;
		    	final String destName = getTargetFile(event);
		    	if(sourceNames == null || destName == null)
		    		return;
		        		    			    	
		    	for(int i = 0; i<sourceNames.length; i++)
		    	{
		    		File sourceFile = new File(sourceNames[i]);
		    		File destFile = new File(destName + "/" + sourceFile.getName());

Soweit bin ich (bzw. den Code gibts sowieso, ist also nicht von mir) und jetzt will ich eben, dass in SourceFile ned nur eine URL zu der Mail ist, sondern dass ich daraus mir das Dokument holen kann.

Wie kann ich das machen?

Grüße,
Mathias

Sebastianh

  • Gast
Re: Aus einer URL die zugehörige Mail erhalten?
« Antwort #1 am: 03.11.09 - 13:33:25 »
Hi,

evtl. :
db.getDocumentByURL()?

Gruß,

Sebastian
« Letzte Änderung: 03.11.09 - 14:56:39 von Sebastianh »

Offline MatthiasK

  • Frischling
  • *
  • Beiträge: 14
Re: Aus einer URL die zugehörige Mail erhalten?
« Antwort #2 am: 25.11.09 - 15:24:08 »
Hi zusammen,

genau dasselbe bräuchte ich auch und zwar aus Notes 8.5 heraus eine Mail per D&D in eine Dokumentenverwaltung hinein.
Wenn ich das jetzt mache wird als Dokument eben nur eine URL Datei exportiert. Wenn ich das ganze als TXT oder noch besser als html oder PDF rausziehen könnte wäre perfekt....aber text reicht zur not ;-)

seht ihr da eine Möglichkeit? muss leider gestehen dass ich von Notes nicht wiklich viel ahnung habe...

danke vorab für jedwede hilfe...

Sebastianh

  • Gast
Re: Aus einer URL die zugehörige Mail erhalten?
« Antwort #3 am: 26.11.09 - 08:55:27 »
Hi,

du kannst mit der Klasse dxlexporter das Dokument aus dem Notesclient heraus exportieren und in (quasi) Domino-XML abspeichern. Das sollte Dir weiterhelfen, wenn ich Dich richtig verstanden habe.

Grüße,

Sebastian

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Aus einer URL die zugehörige Mail erhalten?
« Antwort #4 am: 26.11.09 - 22:20:38 »
Mit der URL kannst du zumindest dir zumindest per jakarta HTTP Client die Mail als HTML besorgen. Damit hast du sämtliche Formatierungsinformationen der Domino HTTP Engine.
Die Attachments kannst du dir auch besorgen, indem du das html der Mail parst. Es gäbe da sicher auch einen anderen Weg über die Notes API.
Schwieriger wird es schon mit eventuell eingebetteten COM Objekten.

Es gibt afaik keinen einfacheren Weg.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline MatthiasK

  • Frischling
  • *
  • Beiträge: 14
Re: Aus einer URL die zugehörige Mail erhalten?
« Antwort #5 am: 27.11.09 - 08:21:44 »
das klingt schonmal nicht schlecht, den anhang bräuchte ich noch nichtmal...

gibts da irgendeine art step-by-step anleitung oder so? ich hab mir den jakarta client zwar schon besorgt aber weiß ehrlich gesagt jetzt nichts damit anzufangen...müsste ich den in einen apache einbinden oder wie geht das vor sich?

vielen dank vorab

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Aus einer URL die zugehörige Mail erhalten?
« Antwort #6 am: 27.11.09 - 09:20:55 »
In HTTP Client sind Beispiele dabei. Du brauchst einen GET Request.

Hier noch ein wenig Code von mir allerdings für einen Post Request mit ein paar Besonderheiten. Hab Kommentare reingeschrieben:
ProxyAuthConfig und HostAuthConfig sind einfach ein paar JavaBeans (Java Klassen mit gettern und settern).

Code
	public InputStream excecute() throws ConfigurationException, HttpException,
			IOException, HttpConnectionNotOkException {
		if (url == null) {
			throw new ConfigurationException("url must be set.");
		}
		if (bodyEntity == null) {
			throw new ConfigurationException("body Entity is not filled");
		}
		HttpClient client = new HttpClient();
		initProxyAuth(client, this.proxyAuthConfig);
		initHostAuth(client, this.hostAuthConfig);

		PostMethod postMethod = new PostMethod(url);
                
// wirst du nicht brauchen - Start
		Iterator itKey = httpHeader.keySet().iterator();
		while (itKey.hasNext()) {
			String headerName = itKey.next().toString();
			String headerValue = httpHeader.get(headerName).toString();
			postMethod.addRequestHeader(headerName, headerValue);
		}

		postMethod.setRequestEntity(bodyEntity);
// wirst du nicht brauchen ENDE

		int ret = client.executeMethod(postMethod); // request abfeuern
		if (ret != 200) {
			String retAsString = postMethod.getResponseBodyAsString();
			
			throw new HttpConnectionNotOkException("Return code was: " + ret + "\nmsg=" + retAsString);
		}

		InputStream is = postMethod.getResponseBodyAsStream();
		return is;

	}

	private void initProxyAuth(HttpClient client, ProxyAuthConfig config) {
		if (config != null) {
			client.getHostConfiguration().setProxy(config.getHost(),
					config.getPort());
			HttpState state = client.getState();
			AuthScope authScope = new AuthScope(config.getHost(), config
					.getPort(), AuthScope.ANY_REALM);
			state.setProxyCredentials(authScope,
					new UsernamePasswordCredentials(config.getUser(), config
							.getPwd()));
			client.getParams().setAuthenticationPreemptive(true);

		}
	}

	/**
	 * Authentification for remote service.
	 * 
	 * @param host
	 *            remote host
	 * @param port
	 *            remote port
	 * @param hostUserName
	 *            remote user
	 * @param hostPwd
	 *            remote password
	 */
	private void initHostAuth(HttpClient client, HostAuthConfig config) {
		if (config != null) {
			HttpState state = client.getState();
			AuthScope authScope = new AuthScope(config.getHost(), config
					.getPort(), AuthScope.ANY_REALM);
			state.setCredentials(authScope, new UsernamePasswordCredentials(
					config.getUser(), config.getPwd()));
			client.getParams().setAuthenticationPreemptive(true);
		}

	}


/// der aufrufende Code von excecute in einer anderen Klasse. 

	private Object sendSoap(String body) throws HttpException,
			ConfigurationException, IOException, HttpConnectionNotOkException,
			JDOMException {
		Object ret = null;
		String strMsg = "Module " + agtModule + ", sendSoap():";

		InputStream is = null;
		// 2. soap an Server, response
		post = new DoPost();

		// Set the SOAP action and security
		post.setUrl(SOAPUrlTarget + SOAPUrlParams);
		post.setProxyAuth(wsProxyAuth);
		post.setHostAuth(wsHostAuth);

		// Set the Body, generated for each document
		post.setBodyEntity(body);

		post.addHttpHeader("Content-Type", "text/xml; charset=utf-8");
		post.addHttpHeader("Accept",
						"application/soap+xml, application/dime, multipart/related, text/*");
		post.addHttpHeader("User-Agent", "Axis/1.4");
		post.addHttpHeader("Cache-Control", "no-cache");
		post.addHttpHeader("Pragma", "no-cache");
		post.addHttpHeader("SOAPAction",
						"http://sap.com/xi/WebService/soap1.1");

		// SPIErrorHandler.logAction(strMsg + " Post object: \t" +
		// post.toString(), dbCurrent);

		try {

			is = post.excecute();
			// 3. soapResponse verarbeiten.
			SoapSapToBean parser = new SoapSapToBean();
			// SoapToString bean = new SoapToString(); -> for debug purposes
			/**
			 * The Response bean contains the jdom xpath results of the SOAP
			 * return message
			 */
			ResponseBean bean = new ResponseBean();

			ret = parser.process(is, bean);

			is.close();
			is = null;

		} finally {
			/*
			 * It is very urgent to close the stream in a controlled way, to
			 * avoid problems on the OS
			 */
			if (is != null) {
				try {
					is.close();
				} catch (java.io.IOException ioe) {
					//ioe.printStackTrace();
					SPIErrorHandler.handleError(ioe.toString(), dbCurrent);
				}
			} // end if

		}

		// transfer the SOAP result to the next level
		return ret;

	}

Nicht vergessen den InputStream in der aufrufenden Methode im finally zu schliessen!
Den InputStream kannst du dann in ein File schreiben. Oder einen StringWriter. In meinem Fall übergeb ich es an ein selbstgeschriebenes XML-To-Bean Framework. Was auch immer.

Zum Testen kannst du auch erstmal einen String zurückgeben. Wie in dem Exception-Zweig von dem excecute:
Code
String retAsString = postMethod.getResponseBodyAsString();

Gibt natürlich ein Sicherheitsproblem. Um dich am Domino Server zu autorisieren, eine Mail-NSF zu lesen, musst du Leserechte auf sie haben. Bei deiner Mailbox sollte das kein Problem darstellen. Gilt aber nicht unbedingt für die Mailboxen anderer Leute. Du kannst username / pwd eines Users einer Admingruppe nehmen. Aber der sollte auch nicht so allgemein bekannt sein.
Möglich ist etwa dir mit Bouncy-Castle Code ein bischen Verschlüsselungscode zu basteln. Dann können Passwortkundige dieses Superusers das Passwort verschlüsselt speichern. Falls du mit einem JSR168/286 Portalserver arbeitest gibts da weitere Single Sign On und sonstige Möglichkeiten. Aber das ist eigentlich schon das nächste Thema.

Frag mich, wenn du was nicht verstehst. Möglicherweise mußt du HTTP redirects folgen. Wird von HTTPClient unterstützt. Versuch google
follow redirects HttpClient
Das Beispiel ist mit HTTP-Post. Du brauchst GET. Aber das ist sehr ähnlich. Schau in die API oder die Beispiele, die bei HTTP Client dabei sind.

Gruß
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz