Category Archives: Uncategorized

Email Forwarding with Amazon SES

I’m using AWS for the domain and web site of my high school alumni association. Hosting a static site on S3 is practically free, so we just end up paying for Route 53.

All that was missing was the ability to set up a few incoming email addresses to forward to external addresses. It turns out that Simple Email Service (SES) doesn’t offer simple email forwarding. There’s an AWS blog here that provided the beginning of what I needed: you set up SES to accept email, write messages to S3, and trigger a Lambda function to send a new email with the original email attached.

The primary limitations of this solution are:

  1. It assumes you want to forward all of your incoming email to a single destination address (or that you’re willing to set up a Lambda function per destination). I’d like the flexibility to set up several forwarders in a single Lambda.
  2. It assumes you want the original email to be attached as an .eml file. Since you can’t open an .eml file in web clients like gmail, that didn’t work for me.

I made the improvements I needed and published the Lambda code here: https://github.com/karlkranich/lambda-ses-email-forwarder. If you want to implement it, you’ll need to follow most of the instructions in the AWS blog to set up SES, S3, and Lambda. Then just skip the MailRecipient environment variable and instead create a MailAddressMap environment variable that contains a string formatted like this:

'[{"from":"fromaddress@example.com","to":"newaddress@gmail.com"},{"from":"fromaddress2@example.com","to":"newaddress2@anotherdomain.com"}]'

If you have any trouble getting it working, you should be able to find troubleshooting information in CloudWatch logs.

CloudFormation-based S3 Bucket Policies with Conditional Statements and Principals

I have a project where I needed to build an S3 bucket policy in a CFT, where certain statements should only be in the policy when a user ARN is provided. It’s hard to even Google for this use case, since bucket policies can contain “conditions”, but that’s different from conditionally including or excluding a policy statement.

The linked gists contain one extra feature – if a second user ARN is provided via a parameter, that user is added to one of the policy statements.

I’ve included json and yml versions. The yml is much easier to read, but my use case required json, so I’ve included both: https://gist.github.com/karlkranich/cd27f8bda64aa9e1cdab6cb52eaafcd8

Solved: Build failure of Xylophone project in The Complete 2020 Flutter Developer Bootcamp

I’m really enjoying The Complete 2020 Flutter Development Bootcamp with Dart on Udemy by Angela Yu and London App Brewery. I like how Angela has organized the progression of concepts and challenges. It’s also easy to skip lectures if you’re already an experienced programmer and don’t need to learn concepts like data types and function syntax.

My first big snag came when I added the audioplayers package to the Xylophone project. The run tab fills up with errors, ending with:

Could not build the application for the simulator.
Error launching application on iPhone 12 Pro Max.
Continue reading

Installing boto3 for python3 in Cloud9

I’m developing python code in a Cloud9 environment. Tried setting the default python version to 3, but “python” still runs python 2. It’s not a big deal to type “python3” each time, but “pip install boto3” only installed the module for python 2.

Finally, this adaptation of a command I found on stackoverflow worked:

python3 -m pip install --user boto3

Switch your Mac’s online call handler from Skype to Lync

I had been using Skype for Business as the online call handler for my Mac, but had various problems in online meetings – sometimes not seeing screen shares, sometimes not seeing chat, sometimes others not seeing my screen share.

But when I tried to switch to Lync, it took a while to figure out how to make “Join online meeting” links work – they kept launching Skype. Turns out that it’s simple – go to Lync Preferences > General tab and change the drop-down settings in the Services section (you can click on the image to expand it).

Anja’s First Model Rocket Launch

Anja's rocket gone My friend Tom invited us to a Rocketry of Orlando’s Community Kids launch event on Saturday at the Little Big Econ State Forest (non-members pay a small fee to launch). We picked up a rocket at Walmart on Friday and got it ready. It was a little windy, but we had a great time!

At left you’ll see that we had a successful launch!

Check more of my photos on Flickr.

PC vs. Mac vs. Linux ads

Scroll down to the “PC Mac Linux” ads at www.novell.com/videos. Funny!

Welcome!

Welcome to my tech blog.? I’m involved in network design, security, administration, and troubleshooting.? As I come up with tips, tricks, or resources to let you know about, I’ll post them here.? I’ll start by posting the various information that used to be on my old website.