2014-09-26 2 views
0

я пытаюсь отправить почту с приложением путем использования Amazon SESAmazon SES Отправка электронной почты с вложениями

HttpRequest httpReq = new HttpRequest(); 
    httpReq.setMethod('POST'); 
    httpReq.setEndpoint('https://email.us-east-1.amazonaws.com'); 
    Blob bsig = Crypto.generateMac('HmacSHA256', Blob.valueOf(awsFormattedNow), Blob.valueOf(secret)); 
    httpReq.setHeader('X-Amzn-Authorization','AWS3-HTTPS AWSAccessKeyId='+key+', Algorithm=HmacSHA256, Signature='+EncodingUtil.base64Encode(bsig)); 
    httpReq.setHeader('Date',awsFormattedNow); 

    httpReq.setHeader('From','[email protected]'); 
    httpReq.setHeader('To','[email protected]'); 
    httpReq.setHeader('Subject','Hello'); 

    httpReq.setHeader('Accept-Language','en-US'); 
    httpReq.setHeader('Content-Language','en-US'); 
    httpReq.setHeader('Content-Type','multipart/mixed;boundary=\"_003_97DCB304C5294779BEBCFC8357FCC4D2\"'); 
    httpReq.setHeader('MIME-Version','1.0'); 

// httpReq.setHeader('Action','SendRawEmail'); 


    String email = 'Action=SendRawEmail'; 

    email += '--_003_97DCB304C5294779BEBCFC8357FCC4D2 \n Content-Type: text/plain; charset="us-ascii" \n Content-Transfer-Encoding: quoted-printable \n'; 

    email +='Hi Andrew. Here are the customer service names and telephone numbers I promised you.'; 

    httpReq.setBody(email); 
    System.debug(httpReq.getBody()); 
    Http http = new Http(); 
    HttpResponse response = http.send(httpReq); 

Я получаю сообщение об ошибке, как

<AccessDeniedException> 
    <Message>Unable to determine service/operation name to be authorized</Message> 
</AccessDeniedException> 

Пожалуйста, пожалуйста, помогите мне, где я делаю неправильно. Заранее благодарен

ответ

1

Посмотрите на документацию. В коде есть несколько проблем.

SES ожидает HTTP POST со всеми параметрами, нанизанными вместе с application/x-www-form-urlencoded POST-запросами.

Ваш HTTP-запрос должен быть Content-type: application/x-www-form-urlencoded, а не multipart/mixed... - это часть необработанного сообщения, которое вы пытаетесь отправить.

Вы смешиваете вещи, которые должны быть в теле, и вместо этого устанавливаете заголовки HTTP-запросов. Например, они также неверны:

httpReq.setHeader('From','[email protected]'); 
httpReq.setHeader('To','[email protected]'); 
httpReq.setHeader('Subject','Hello'); 

Они должны быть отправлены в тело запроса, а не в заголовки запроса HTTP. Кроме того, значения urlencoded. Из примера кода:

Action=SendEmail 
&Source=user%40example.com 
&Destination.ToAddresses.member.1=allan%40example.com 

Для удобства использования были добавлены разрывы строк.

Вашими интересами может быть лучше всего попытаться успешно отправить простое электронное письмо, а затем попытаться изменить код для поддержки вложений, поскольку у вас есть многочисленные ошибки, которые необходимо будет исправить, прежде чем этот код будет работать должным образом.

http://docs.aws.amazon.com/ses/latest/DeveloperGuide/query-interface-requests.html http://docs.aws.amazon.com/ses/latest/APIReference/API_SendRawEmail.html

+0

Привет @michael, я понял ошибку после просмотра этого поста, я не в состоянии понять, который идет в заголовки и которые не являются и как установить граничные (заголовки или тело). не могли бы вы дать мне пример кода для отправки необработанного сообщения без вложений, так что я буду более понятным. Спасибо за ваш ответ – Sunny

+0

Привет @Michael, я сделал это. Большое спасибо за ваши ценные предложения, помогли мне много – Sunny

Смежные вопросы