【问题标题】:LocalStack fails for mocking send email endpoint through AWS SES SDK in JavaLocalStack 无法通过 Java 中的 AWS SES SDK 模拟发送电子邮件端点
【发布时间】:2022-06-15 23:29:35
【问题描述】:

我正在使用 LocalStack 模拟 AWS SES 进行测试。我正在通过它的 docker 映像使用 LocalStack。我在创建 AWS SES 客户端期间通过覆盖它的端点来模拟 AWS:

AmazonSimpleEmailService client = AmazonSimpleEmailServiceClientBuilder.standard()
            .withEndpointConfiguration(new EndpointConfiguration(awsEndpoint, region))
            .withCredentials(awsCredentials)
            .build();

在创建身份、列出和发送电子邮件时,AWS CLI(至少对于 SES)与 LocalStack(通过通过 --endpoint-url 参数为其提供 LocalStack 的端点)正常工作。但是,当通过基于 Java 的 AWS SES 开发工具包以编程方式命中时,基于发送电子邮件的开发工具包调用会失败。每当进行此类调用时,LocalStack 都会抛出以下错误:

2022-04-26T11:30:17.625:WARNING:localstack.utils.server.http2_server: Error in proxy handler for request POST http://localhost:4566/: object of type 'NoneType' has no len() Traceback (most recent call last):
  File "/opt/code/localstack/localstack/utils/server/http2_server.py", line 185, in index
    result = await run_sync(handler, request, data)
  File "/opt/code/localstack/localstack/utils/asyncio.py", line 85, in run_sync
    return await loop.run_in_executor(thread_pool, copy_context().run, func_wrapped)
  File "/opt/code/localstack/localstack/utils/threads.py", line 38, in run
    result = self.func(self.params, **kwargs)
  File "/opt/code/localstack/localstack/utils/asyncio.py", line 30, in _run
    return fn(*args, **kwargs)
  File "/opt/code/localstack/localstack/services/generic_proxy.py", line 972, in handler
    return modify_and_forward(
  File "/opt/code/localstack/localstack/services/generic_proxy.py", line 516, in wrapper
    value = func(*args, **kwargs)
  File "/opt/code/localstack/localstack/services/generic_proxy.py", line 596, in modify_and_forward
    listener_result = listener.forward_request(
  File "/opt/code/localstack/localstack/services/edge.py", line 178, in forward_request
    result = do_forward_request(api, method, path, data, headers, port=port)
  File "/opt/code/localstack/localstack/services/edge.py", line 233, in do_forward_request
    result = do_forward_request_inmem(api, method, path, data, headers, port=port)
  File "/opt/code/localstack/localstack/services/edge.py", line 257, in do_forward_request_inmem
    response = modify_and_forward(
  File "/opt/code/localstack/localstack/services/generic_proxy.py", line 516, in wrapper
    value = func(*args, **kwargs)
  File "/opt/code/localstack/localstack/services/generic_proxy.py", line 596, in modify_and_forward
    listener_result = listener.forward_request(
  File "/opt/code/localstack/localstack/http/adapters.py", line 38, in forward_request
    response = self.request(request)
  File "/opt/code/localstack/localstack/aws/proxy.py", line 42, in request
    response = self.skeleton.invoke(context)
  File "/opt/code/localstack/localstack/aws/skeleton.py", line 153, in invoke
    return self.dispatch_request(context, instance)
  File "/opt/code/localstack/localstack/aws/skeleton.py", line 165, in dispatch_request
    result = handler(context, instance) or {}
  File "/opt/code/localstack/localstack/aws/forwarder.py", line 57, in _call
    return handler(context, req)
  File "/opt/code/localstack/localstack/aws/skeleton.py", line 117, in __call__
    return self.fn(*args, **kwargs)
  File "/opt/code/localstack/localstack/aws/api/core.py", line 95, in operation_marker
    return fn(*args, **kwargs)
  File "/opt/code/localstack/localstack/services/ses/provider.py", line 258, in send_raw_email
    message = ses_backend.send_raw_email(source, destinations, raw_data, context.region)
  File "/opt/code/localstack/.venv/lib/python3.8/site-packages/moto/ses/models.py", line 258, in send_raw_email
    recipient_count = len(destinations)
TypeError: object of type 'NoneType' has no len()

我不确定究竟是什么导致了错误。请注意,相同的基于发送电子邮件的 SDK 调用与真正的 AWS 完美配合。这是我困惑和怀疑的根源:为什么 LocalStack 会以这种方式表现?它完美地模拟了通过 AWS CLI 发出的发送电子邮件调用,但使用基于 AWS SES 开发工具包的调用却无法做到这一点。我正在使用 AWS 的 SES 版本 1 开发工具包。希望大家能帮我解答一下我的这个疑惑。

【问题讨论】:

    标签: java amazon-web-services localstack


    【解决方案1】:

    我在 localstack 上遇到了同样的问题:0.12.6 升级到 0.14.3 现在可以正常工作了。

    记得验证发件人的邮箱:

    awslocal ses verify-email-identity --email-address sender@example.com
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2016-11-17
      • 2018-07-18
      • 2018-05-29
      • 1970-01-01
      相关资源
      最近更新 更多