java – Struts 2 – 使用嵌入式URL发送邮件

对于我公司的项目,我必须发送包含嵌入式URL的电子邮件,系统将提示用户遵循这些URL.

例如,一个人在网站上注册,然后Struts2应用程序向该人发送一封电子邮件,其中有一个URL来确认订阅.

到目前为止,表单提交和发送电子邮件(从操作内部)工作得很好.我遇到的问题是我无法找到一种方法来生成我想要嵌入邮件正文的URL.

我必须以错误的方式做到这一点,但我正在思考如下的事情:

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("me@me.fr", "Information", body.toString());

    return SUCCESS;
}

其中会有一个UrlManager(可以由框架提供的东西)和一个方法getUrlForAction(),它获取一个动作及其参数作为输入,并输出一个包含相应URL的String(如http://mysite.mycompany .COM /确认?ID = xxxxxyyyyyaaaaa).

有没有人对如何做到这一点有任何想法或指示?

编辑:

我尝试使用UrlProvider,但我在determineActionUrl调用上得到一个空指针异常.也许我用错了方法.

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);

最佳答案 您需要在操作中创建属性(依赖项)

@Inject
public void setActionMapper(ActionMapper actionMapper) {
  this.actionMapper = actionMapper;
}

private UrlHelper urlHelper;

@Inject
public void setUrlHelper(UrlHelper urlHelper) {
  this.urlHelper = urlHelper;
}

然后在行动中你可以写出类似的东西

Map<String, Object> parameters = new HashMap<>();
ActionMapping mapping = new ActionMapping("action", "namespace", "", parameters);
String uri = actionMapper.getUriFromActionMapping(mapping);
String url  = urlHelper.buildUrl(uri, ServletActionContext.getRequest(), ServletActionContext.getResponse(), parameters, "http", true, false, true, false);
点赞