Struts 2 - Mail mit eingebetteter URL senden

Für ein Projekt für mein Unternehmen muss ich E-Mails mit eingebetteten URLs senden, denen der Benutzer folgen muss.

Beispielsweise registriert sich eine Person auf der Website, und dann sendet die Struts2-Anwendung eine E-Mail an diese Person, in der sich eine URL zur Bestätigung des Abonnements befindet.

Bisher funktioniert das Absenden des Formulars und das Senden der E-Mail (aus der Aktion heraus) einwandfrei. Das Problem, bei dem ich stecke, ist, dass ich keine Möglichkeit finde, die URL zu generieren, die ich in den Mail-Body einbetten möchte.

Ich muss es falsch gemacht haben, aber ich habe über Folgendes nachgedacht:

public String send() throws Exception {
    StringBuffer body = new StringBuffer();

    HashMap<String, String> params = new HashMap<String, String>();
    params.put("id", "xxxxxyyyyyaaaaa");

    body.append("Veuillez vous rendre ici :");
    body.append(UrlManager.getUrlForAction("action", params));

    SendMail sendMail = new SendMail();
    sendMail.send("[email protected]", "Information", body.toString());

    return SUCCESS;
}

wo gäbe es eineUrlManager (etwas, das vom Framework zur Verfügung gestellt werden könnte) mit einer MethodegetUrlForAction() Das ruft eine Aktion und ihre Parameter als Eingabe ab und gibt einen String aus, der die entsprechende URL enthält (wie zhttp://mysite.mycompany.com/confirm?id=xxxxxyyyyyaaaaa).

Hat jemand irgendwelche Ideen oder Hinweise, wie man das macht?

BEARBEITEN:

Ich habe versucht mitUrlProvider, aber ich erhalte eine Nullzeigerausnahme auf demdetermineActionUrl Anruf. Vielleicht verwende ich es falsch.

HashMap<String,Object> params = new HashMap<String,Object>();
params.put("id", data.getMd5());

UrlProvider up = new ComponentUrlProvider(
                            new Component(ServletActionContext.getValueStack(ServletActionContext.getRequest())),
                            ServletActionContext.getRequest().getParameterMap());
downloadUrl = up.determineActionURL("confirm", "/", "GET",
                                    ServletActionContext.getRequest(),
                                    ServletActionContext.getResponse(),
                                    params,
                                    "http", true, true, true, true);

Antworten auf die Frage(2)

Ihre Antwort auf die Frage