Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Boot-使用Java列表向多个收件人发送电子邮件无效_Java_Spring_Spring Boot_Email - Fatal编程技术网

Spring Boot-使用Java列表向多个收件人发送电子邮件无效

Spring Boot-使用Java列表向多个收件人发送电子邮件无效,java,spring,spring-boot,email,Java,Spring,Spring Boot,Email,我正在尝试使用SpringBoot向多个用户发送邮件。虽然没有使用Java列表,mailRequest.getTo().toString()中的send为一个用户工作。但是,当我试图使用Java列表将其发送给多个收件人时,它显示了错误。我使用的是SMTP服务器,身份验证连接为true 我从swagger UI输入的json是: "fromEmail": "******@Webmail.abc", "fullName": "

我正在尝试使用SpringBoot向多个用户发送邮件。虽然没有使用
Java列表
mailRequest.getTo().toString()
中的
send
为一个用户工作。但是,当我试图使用
Java列表
将其发送给多个收件人时,它显示了错误。我使用的是
SMTP
服务器,身份验证连接为
true

我从swagger UI输入的json是:

"fromEmail": "******@Webmail.abc",
  "fullName": "Your Name",
  "message": "Hello, this is a test email sending from Our App",
  "subject": "Greetings",
  "to": [
    "XXXXXXX@gmail.com", "XXXXXXX@gmail.com"
   ]
错误日志

org.springframework.mail.MailParseException: Could not parse mail; nested exception is javax.mail.internet.AddressException: Missing ']' in string ``[Ljava.lang.String;@6d38bf8'' at position 27
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:384) ~[spring-context-support-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:366) ~[spring-context-support-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at com.mail.app.service.impl.MailerServiceImpl.send(MailerServiceImpl.java:51) ~[main/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.lambda$doSubmit$3(AsyncExecutionAspectSupport.java:276) ~[spring-aop-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: javax.mail.internet.AddressException: Missing ']'
Caused by: javax.mail.internet.AddressException: Missing ']'

    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:984) ~[jakarta.mail-1.6.5.jar:1.6.5]
    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:728) ~[jakarta.mail-1.6.5.jar:1.6.5]
    at javax.mail.internet.InternetAddress.parse(InternetAddress.java:705) ~[jakarta.mail-1.6.5.jar:1.6.5]
    at org.springframework.mail.javamail.MimeMessageHelper.parseAddress(MimeMessageHelper.java:711) ~[spring-context-support-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at org.springframework.mail.javamail.MimeMessageHelper.setTo(MimeMessageHelper.java:597) ~[spring-context-support-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    at com.mail.app.service.impl.MailerServiceImpl.lambda$send$1(MailerServiceImpl.java:45) ~[main/:na]
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:375) ~[spring-context-support-5.2.8.RELEASE.jar:5.2.8.RELEASE]
    ... 15 common frames omitted
MailController类:

@RestController
@RequestMapping("/email")
public class MailController {

    @Autowired
    private MailService mailService;
    public MailController(MailService mailService){
        this.mailService = mailService;
    }
    @PostMapping("/send")
    @ResponseStatus(HttpStatus.CREATED)
    public void send(@RequestBody MailRequest mailRequest){
        mailService.send(mailRequest);
    }
}
public class MailBuilder {
    private Mail mail = new Mail();
    
    public Mail build() {
        return mail;
    }
    
    public MailBuilder to(String newTo) {
        if (mail.getTo() == null) mail.setTo(new ArrayList<>());
        mail.getTo().add(newTo);
        return this;
    }
    
    public MailBuilder from(String newfrom) {
        if(mail.getFrom() == null) mail.setFrom(newfrom);
        return this;
    }
    
    // other codes go here
}
@Component
public class MailServiceImpl implements MailService {
    @Autowired private MailerService mailerService;
    @Autowired private MailerConfig mailerConfig;
    @Autowired private TemplateEngine templateEngine;
    
    private final String MAIL_TEMPLATE = "mail";

    @Override
    public void send(MailRequest mailRequest) {
        Map<String, Object> body = new HashMap<>();
        body.put("fromEmail", mailRequest.getFromEmail());
        body.put("message", mailRequest.getMessage());
        mailerService.send(new MailBuilder()
                .to(mailRequest.getTo().toString())
                .from(mailRequest.getFromEmail())
                .subject(mailRequest.getSubject())
                .body(templateEngine, MAIL_TEMPLATE, body)
                .build());
        
    }

}
邮件请求类:(从swagger UI获取json值)

@数据
@字段默认值(级别=AccessLevel.PRIVATE)
公共类邮件请求{
私有字符串全名;
私有列表到;//私有字符串到;有效
电子邮件中的私有字符串;
私有字符串主题;
私有字符串消息;
//地图参数;
}
MailBuilder类:

@RestController
@RequestMapping("/email")
public class MailController {

    @Autowired
    private MailService mailService;
    public MailController(MailService mailService){
        this.mailService = mailService;
    }
    @PostMapping("/send")
    @ResponseStatus(HttpStatus.CREATED)
    public void send(@RequestBody MailRequest mailRequest){
        mailService.send(mailRequest);
    }
}
public class MailBuilder {
    private Mail mail = new Mail();
    
    public Mail build() {
        return mail;
    }
    
    public MailBuilder to(String newTo) {
        if (mail.getTo() == null) mail.setTo(new ArrayList<>());
        mail.getTo().add(newTo);
        return this;
    }
    
    public MailBuilder from(String newfrom) {
        if(mail.getFrom() == null) mail.setFrom(newfrom);
        return this;
    }
    
    // other codes go here
}
@Component
public class MailServiceImpl implements MailService {
    @Autowired private MailerService mailerService;
    @Autowired private MailerConfig mailerConfig;
    @Autowired private TemplateEngine templateEngine;
    
    private final String MAIL_TEMPLATE = "mail";

    @Override
    public void send(MailRequest mailRequest) {
        Map<String, Object> body = new HashMap<>();
        body.put("fromEmail", mailRequest.getFromEmail());
        body.put("message", mailRequest.getMessage());
        mailerService.send(new MailBuilder()
                .to(mailRequest.getTo().toString())
                .from(mailRequest.getFromEmail())
                .subject(mailRequest.getSubject())
                .body(templateEngine, MAIL_TEMPLATE, body)
                .build());
        
    }

}
公共类邮件生成器{
私人邮件=新邮件();
公共邮件构建(){
回信;
}
公共邮件生成器收件人(字符串newTo){
if(mail.getTo()==null)mail.setTo(new ArrayList());
mail.getTo().add(newTo);
归还这个;
}
公共邮件生成器发件人(字符串newfrom){
if(mail.getFrom()==null)mail.setFrom(newfrom);
归还这个;
}
//其他代码在这里
}
邮件服务类别:

@RestController
@RequestMapping("/email")
public class MailController {

    @Autowired
    private MailService mailService;
    public MailController(MailService mailService){
        this.mailService = mailService;
    }
    @PostMapping("/send")
    @ResponseStatus(HttpStatus.CREATED)
    public void send(@RequestBody MailRequest mailRequest){
        mailService.send(mailRequest);
    }
}
public class MailBuilder {
    private Mail mail = new Mail();
    
    public Mail build() {
        return mail;
    }
    
    public MailBuilder to(String newTo) {
        if (mail.getTo() == null) mail.setTo(new ArrayList<>());
        mail.getTo().add(newTo);
        return this;
    }
    
    public MailBuilder from(String newfrom) {
        if(mail.getFrom() == null) mail.setFrom(newfrom);
        return this;
    }
    
    // other codes go here
}
@Component
public class MailServiceImpl implements MailService {
    @Autowired private MailerService mailerService;
    @Autowired private MailerConfig mailerConfig;
    @Autowired private TemplateEngine templateEngine;
    
    private final String MAIL_TEMPLATE = "mail";

    @Override
    public void send(MailRequest mailRequest) {
        Map<String, Object> body = new HashMap<>();
        body.put("fromEmail", mailRequest.getFromEmail());
        body.put("message", mailRequest.getMessage());
        mailerService.send(new MailBuilder()
                .to(mailRequest.getTo().toString())
                .from(mailRequest.getFromEmail())
                .subject(mailRequest.getSubject())
                .body(templateEngine, MAIL_TEMPLATE, body)
                .build());
        
    }

}
@组件
公共类MailServiceImpl实现MailService{
@自动连线私人邮件服务;
@自动连接的私有MailerConfig MailerConfig;
@自动连线专用模板引擎模板引擎;
专用最终字符串MAIL_TEMPLATE=“MAIL”;
@凌驾
公共无效发送(MailRequest MailRequest){
Map body=newhashmap();
body.put(“fromEmail”,mailRequest.getFromEmail());
body.put(“message”,mailRequest.getMessage());
mailerService.send(新的MailBuilder()
.to(mailRequest.getTo().toString())
.from(mailRequest.getFromEmail())
.subject(mailRequest.getSubject())
.body(模板引擎、邮件模板、正文)
.build());
}
}
列表。toString()
将无法提供可解析的良好输出。它可能需要以逗号分隔的电子邮件列表

试着做这样的事情

        mailerService.send(new MailBuilder()
                .to(mailRequest.getTo().stream().collect(Collectors.joining(",")))
                .from(mailRequest.getFromEmail())
                .subject(mailRequest.getSubject())
                .body(templateEngine, MAIL_TEMPLATE, body)
                .build());


尝试在
MailBuilder
中将
更改为
方法以接受列表

public MailBuilder to(List<String> emails) {
    if (mail.getTo() == null) mail.setTo(new ArrayList<>());
    mail.getTo().addAll(emails);
    return this;
}
publicmailbuilder(列出电子邮件){
if(mail.getTo()==null)mail.setTo(new ArrayList());
mail.getTo().addAll(电子邮件);
归还这个;
}

只需将电子邮件列表传递给生成器
.to(mailRequest.getTo())
,而不是
toString()

我添加了
mailRequest.getTo().stream().toArray(String[]::new).toString()
内部
to
。但是问题仍然和以前一样。
.to(mailRequest.getTo().stream().collect(Collectors.joining(“,”))
试试这个(我编辑了答案)谢谢。你救了我一天。