wco_email 0.1.1.86 → 0.1.1.89
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.txt +2 -0
- data/app/controllers/wco_email/contexts_controller.rb +5 -3
- data/config/initializers/00_s3.rb +6 -5
- data/config/initializers/00_s3.rb-example +7 -6
- data/lib/lambda.py +104 -0
- data/lib/tasks/wco_email_tasks.rake +8 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e60d49db459dd89fd3a7b06dd6c019830661a1704d42f79e16ea3971dde0ac06
|
4
|
+
data.tar.gz: 02351f63e6b8c1f39c99f8af362fc1c9c9f17c07b2b26a56ba989199622d15b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e942ff13fddfe9d98532c56ca842a4b48d2c0fe4425b3c4dc0c26ccca9789cc021850227be575649775e29418e14ff33695b8870727c2f6f848c41f5c684401
|
7
|
+
data.tar.gz: 44ae53ffd1a31612cb21097eeaeb9d335319268c024c9c7299d008b09639d9924b9d6b646ee1f80731558ab456b8d8dcb55c25f21f91624d83f499a794073937
|
data/README.txt
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
= Install =
|
3
3
|
|
4
|
+
alias be='bundle exec '
|
4
5
|
alias dc='docker-compose '
|
5
6
|
|
6
7
|
Copy and edit the config file:
|
@@ -26,6 +27,7 @@
|
|
26
27
|
You need a copy of wco_models.git locally ( default location is ~/projects/ruby/wco_models )
|
27
28
|
|
28
29
|
awslocal s3api create-bucket --bucket wco-email-development
|
30
|
+
awslocal s3api create-bucket --bucket wco-email-ses-development
|
29
31
|
|
30
32
|
== Troubleshooting ==
|
31
33
|
|
@@ -47,6 +47,7 @@ class WcoEmail::ContextsController < WcoEmail::ApplicationController
|
|
47
47
|
def index
|
48
48
|
authorize! :index, WcoEmail::Context
|
49
49
|
@ctxs = WcoEmail::Context.all
|
50
|
+
|
50
51
|
if params[:lead_id]
|
51
52
|
@lead = Lead.find params[:lead_id]
|
52
53
|
@ctxs = @ctxs.where( lead_id: @lead.id )
|
@@ -56,14 +57,15 @@ class WcoEmail::ContextsController < WcoEmail::ApplicationController
|
|
56
57
|
@ctxs = @ctxs.where( :sent_at.ne => nil )
|
57
58
|
elsif 'false' == params[:sent]
|
58
59
|
@ctxs = @ctxs.where( sent_at: nil )
|
59
|
-
else
|
60
|
-
|
61
|
-
|
60
|
+
# else
|
61
|
+
# ## default, show notsent.
|
62
|
+
# @ctxs = @ctxs.where( :sent_at.ne => nil )
|
62
63
|
end
|
63
64
|
|
64
65
|
@ctxs = @ctxs.order_by( sent_at: :desc, send_at: :desc
|
65
66
|
).page( params[:ctxs_page]
|
66
67
|
).per( current_profile.per_page )
|
68
|
+
|
67
69
|
end
|
68
70
|
|
69
71
|
def new
|
@@ -1,13 +1,14 @@
|
|
1
|
+
|
1
2
|
::S3_CREDENTIALS ||= {
|
2
3
|
## user:
|
3
4
|
access_key_id: "",
|
4
5
|
secret_access_key: "",
|
5
6
|
bucket: "wco-email-development",
|
6
7
|
region: 'us-east-1',
|
8
|
+
}
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
bucket_ses: "",
|
12
|
-
region_ses: 'us-east-1',
|
10
|
+
::SES_S3_CREDENTIALS ||= {
|
11
|
+
endpoint: "http://localhost:4566/",
|
12
|
+
force_path_style: true,
|
13
13
|
}
|
14
|
+
::SES_S3_BUCKET ||= "wco-email-ses-development"
|
@@ -1,13 +1,14 @@
|
|
1
|
+
|
1
2
|
::S3_CREDENTIALS ||= {
|
2
3
|
## user:
|
3
4
|
access_key_id: "",
|
4
5
|
secret_access_key: "",
|
5
|
-
bucket: "",
|
6
|
+
bucket: "wco-email-development",
|
6
7
|
region: 'us-east-1',
|
8
|
+
}
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
bucket_ses: "",
|
12
|
-
region_ses: 'us-east-1',
|
10
|
+
::SES_S3_CREDENTIALS ||= {
|
11
|
+
endpoint: "http://localhost:4566/",
|
12
|
+
force_path_style: true,
|
13
13
|
}
|
14
|
+
::SES_S3_BUCKET ||= "wco-email-ses-development"
|
data/lib/lambda.py
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
|
2
|
+
import os
|
3
|
+
import boto3
|
4
|
+
import email
|
5
|
+
import re
|
6
|
+
from botocore.exceptions import ClientError
|
7
|
+
from email.mime.multipart import MIMEMultipart
|
8
|
+
from email.mime.text import MIMEText
|
9
|
+
from email.mime.application import MIMEApplication
|
10
|
+
import requests
|
11
|
+
|
12
|
+
region = os.environ['Region']
|
13
|
+
office_api_endpoint = os.environ.get('POX_ENDPOINT', None) # https://email.wasya.co/email/messages/from-ses
|
14
|
+
office_api_key = os.environ.get('POX_KEY', None)
|
15
|
+
office_api_secret = os.environ.get('POX_SECRET', None)
|
16
|
+
incoming_email_bucket = os.environ['MailS3Bucket']
|
17
|
+
incoming_email_prefix = os.environ.get('MailS3Prefix', None)
|
18
|
+
sender = os.environ['MailSender']
|
19
|
+
recipient = os.environ['MailRecipient']
|
20
|
+
|
21
|
+
def get_message_from_s3(message_id):
|
22
|
+
if incoming_email_prefix:
|
23
|
+
object_path = (incoming_email_prefix + "/" + message_id)
|
24
|
+
else:
|
25
|
+
object_path = message_id
|
26
|
+
|
27
|
+
object_http_path = f"https://s3.console.aws.amazon.com/s3/object/{incoming_email_bucket}/{object_path}?region={region}"
|
28
|
+
|
29
|
+
client_s3 = boto3.client("s3")
|
30
|
+
object_s3 = client_s3.get_object(Bucket=incoming_email_bucket, Key=object_path)
|
31
|
+
file = object_s3['Body'].read()
|
32
|
+
|
33
|
+
file_dict = {
|
34
|
+
"file": file,
|
35
|
+
"path": object_http_path,
|
36
|
+
"object_path": object_path,
|
37
|
+
}
|
38
|
+
return file_dict
|
39
|
+
|
40
|
+
def create_message(file_dict):
|
41
|
+
separator = ";"
|
42
|
+
mailobject = email.message_from_string(file_dict['file'].decode('utf-8'))
|
43
|
+
subject_original = mailobject['Subject']
|
44
|
+
subject = "FW: " + subject_original
|
45
|
+
body_text = ("The attached message was received from "
|
46
|
+
+ separator.join(mailobject.get_all('From'))
|
47
|
+
+ ". This message is archived at " + file_dict['path'])
|
48
|
+
|
49
|
+
# The file name to use for the attached message. Uses regex to remove all
|
50
|
+
# non-alphanumeric characters, and appends a file extension.
|
51
|
+
filename = re.sub('[^0-9a-zA-Z]+', '_', subject_original) + ".eml"
|
52
|
+
|
53
|
+
msg = MIMEMultipart()
|
54
|
+
text_part = MIMEText(body_text, _subtype="html")
|
55
|
+
msg.attach(text_part)
|
56
|
+
|
57
|
+
msg['Subject'] = subject
|
58
|
+
msg['From'] = sender
|
59
|
+
msg['To'] = recipient
|
60
|
+
|
61
|
+
att = MIMEApplication(file_dict["file"], filename)
|
62
|
+
att.add_header("Content-Disposition", 'attachment', filename=filename)
|
63
|
+
|
64
|
+
msg.attach(att)
|
65
|
+
|
66
|
+
message = {
|
67
|
+
"Source": sender,
|
68
|
+
"Destinations": recipient,
|
69
|
+
"Data": msg.as_string()
|
70
|
+
}
|
71
|
+
return message
|
72
|
+
|
73
|
+
def send_email(message):
|
74
|
+
client_ses = boto3.client('ses', region)
|
75
|
+
|
76
|
+
try:
|
77
|
+
response = client_ses.send_raw_email(
|
78
|
+
Source=message['Source'],
|
79
|
+
Destinations=[
|
80
|
+
message['Destinations']
|
81
|
+
],
|
82
|
+
RawMessage={
|
83
|
+
'Data':message['Data']
|
84
|
+
}
|
85
|
+
)
|
86
|
+
except ClientError as e:
|
87
|
+
output = e.response['Error']['Message']
|
88
|
+
else:
|
89
|
+
output = "Email sent! Message ID: " + response['MessageId']
|
90
|
+
|
91
|
+
return output
|
92
|
+
|
93
|
+
def lambda_handler(event, context):
|
94
|
+
|
95
|
+
message_id = event['Records'][0]['ses']['mail']['messageId']
|
96
|
+
print(f"Received message ID {message_id}")
|
97
|
+
|
98
|
+
result = requests.post(office_api_endpoint,
|
99
|
+
data = { 'object_path': f"https://{incoming_email_bucket}.s3.amazonaws.com/{message_id}",
|
100
|
+
'bucket': incoming_email_bucket,
|
101
|
+
'key': office_api_key,
|
102
|
+
'object_key': message_id,
|
103
|
+
'secret': office_api_secret })
|
104
|
+
print(result)
|
@@ -159,6 +159,14 @@ namespace :wco_email do
|
|
159
159
|
end
|
160
160
|
|
161
161
|
|
162
|
+
desc "seed"
|
163
|
+
task :seed => :environment do
|
164
|
+
inbox_tag = Wco::Tag.find_or_create_by({ slug: 'inbox' })
|
165
|
+
stub = WcoEmail::MessageStub.new({ bucket: 'wco-email-ses-development',
|
166
|
+
object_key: '2021-10-18T18_41_17Fanand_phoenixwebgroup_co' })
|
167
|
+
end
|
168
|
+
|
169
|
+
|
162
170
|
|
163
171
|
desc 'send contexts'
|
164
172
|
task send_contexts: :environment do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wco_email
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.1.
|
4
|
+
version: 0.1.1.89
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Victor Pudeyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-s3
|
@@ -452,6 +452,7 @@ files:
|
|
452
452
|
- config/initializers/08_integrations.rb-example
|
453
453
|
- config/initializers/assets.rb
|
454
454
|
- config/routes.rb
|
455
|
+
- lib/lambda.py
|
455
456
|
- lib/tasks/bjjcollective/sitemap.rb
|
456
457
|
- lib/tasks/db_tasks.rake
|
457
458
|
- lib/tasks/direct_mail_tasks.rake
|